今回の課題・得点と最高完了得点をこのブラウザに保存します。SQL入力・実行結果・教材DBへの変更は再読み込みで戻ります。誤答やヒントによる減点はありません。

最高完了得点: 0 / 65pt

JOIN — テーブルの結合

中級約12分3問

複数のテーブルを 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 と集計 — 結合してから数える

教材DBを初期化中...
SQL エディタCtrl / ⌘ + Enter で実行 · Esc → Tab で移動

結果は1000行まで・実行は30秒まで。中止・リセットは教材への変更だけを破棄し、入力SQLと進捗は残します。

教材DBを初期化しています。

SQL を入力して実行してください
練習問題 — 0/3 完了 (0/65pt)
▶
orders と customers を JOIN して、注文 id (o.id) と注文した顧客の名前 (c.name) を取得してください。
列の順序: 別名自由 → 別名自由。行の順序は自由です。
20pt
○
orders・customers・products の 3 テーブルを JOIN して、顧客名・商品名・数量 (quantity) を取得してください。
20pt
○
「田中太郎」が注文した商品の名前を取得してください(JOIN + WHERE)。
25pt