JOIN — テーブルの結合

中級123

複数のテーブルを JOIN で結合し、顧客・商品・注文をつないで 1 つの結果にまとめる方法を練習します。

なぜ JOIN が必要か

データは 目的ごとに 別のテーブルに 分けて持ちます。 この道場のデータも、

customers(顧客)・products(商品)・orders(注文)の 3 つに分かれています。

orders テーブルには 顧客名も 商品名も 入っておらず、 代わりに

customer_idproduct_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 と集計 — 結合してから数える

データベースを初期化中...
SQL エディタCtrl+Enter で実行
SQL を入力して実行してください
練習問題 — 0/3 完了 (0/65pt)
orders と customers を JOIN して、注文 id (o.id) と 注文した顧客の名前 (c.name) を取得してください。
20pt
orders・customers・products の 3 テーブルを JOIN して、顧客名・商品名・数量 (quantity) を取得してください。
20pt
「田中太郎」が注文した商品の名前を取得してください(JOIN + WHERE)。
25pt