今回の課題・得点と最高完了得点をこのブラウザに保存します。SQL入力・実行結果・教材DBへの変更は再読み込みで戻ります。誤答やヒントによる減点はありません。
最高完了得点: 0 / 65pt
JOIN — テーブルの結合
複数のテーブルを JOIN で結合し、顧客・商品・注文をつないで 1 つの結果にまとめる方法を練習します。
なぜ JOIN が必要か
データは目的ごとに別のテーブルに分けて持ちます。この道場のデータも、
customers(顧客)・products(商品)・orders(注文)の 3 つに分かれています。
orders テーブルには顧客名も商品名も入っておらず、代わりに
customer_id と product_id という 他テーブルの id だけを持っています。
-- orders は id の参照しか持たない
SELECT * FROM orders; -- customer_id, product_id, quantity, ...
「誰が何を注文したか」を名前で知るには、これらをつなぐ必要があります。
それが JOIN です。
INNER JOIN の書き方
SELECT o.id, c.name
FROM orders o
JOIN customers c ON c.id = o.customer_id;
- FROM orders o … orders に o という別名を付ける
- JOIN customers c … customers を c として結合
- ON c.id = o.customer_id … 「どの列どうしが一致すれば同じ行か」を指定
別名(エイリアス)を使うと o.id c.name のようにどのテーブルの列かを短く書けます。
3 つのテーブルをつなぐ
JOIN はいくつでもつなげられます。
SELECT c.name AS 顧客, p.name AS 商品, o.quantity
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;
これで「顧客名・商品名・数量」が 1 行に揃います。
WHERE と組み合わせる
JOIN した結果にも、これまでどおり WHERE で条件を付けられます。
SELECT p.name
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id
WHERE c.name = '田中太郎';
次のレッスン: LEFT JOIN と集計 — 結合してから数える
結果は1000行まで・実行は30秒まで。中止・リセットは教材への変更だけを破棄し、入力SQLと進捗は残します。
教材DBを初期化しています。