複数のテーブルを JOIN で結合し、顧客・商品・注文をつないで 1 つの結果にまとめる方法を練習します。
データは 目的ごとに 別のテーブルに 分けて持ちます。 この道場のデータも、
customers(顧客)・products(商品)・orders(注文)の 3 つに分かれています。
orders テーブルには 顧客名も 商品名も 入っておらず、 代わりに
customer_id と product_id という 他テーブルの id だけを持っています。
-- orders は id の参照しか持たない
SELECT * FROM orders; -- customer_id, product_id, quantity, ...
「誰が 何を 注文したか」を 名前で 知るには、 これらを つなぐ必要があります。
それが 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 のように どのテーブルの列かを 短く書けます。
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 行に揃います。
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 と集計 — 結合してから数える