LEFT JOIN で左側のテーブルを基準に結合する
LEFT JOIN を使うと、左側のテーブルをすべて残しつつ、右側のテーブルと結合できます。右側にマッチするデータがなくても、左側の行は結果に含まれます。
基本構文
SELECT カラム名 FROM テーブル1
LEFT JOIN テーブル2 ON テーブル1.カラム = テーブル2.カラム;具体例
前回と同じ users テーブルと orders テーブルで見てみましょう。
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;結果は次のようになります。
| name | product |
|---|---|
| 田中 | りんご |
| 田中 | みかん |
| 鈴木 | バナナ |
| 佐藤 | NULL |
佐藤さんは注文がありませんが、結果に含まれています。product は NULL になっています。
INNER JOIN との違い
INNER JOIN
両方に存在する行だけ返す。佐藤は出てこない
LEFT JOIN
左側のテーブルはすべて返す。右側がなければ NULL
マッチしないデータを探す
LEFT JOIN を使うと「注文がないユーザー」のような、関連データが存在しない行を探せます。
SELECT users.name
FROM users
LEFT JOIN orders ON users.id = orders.user_id
WHERE orders.id IS NULL;orders.id が NULL ということは、orders にマッチする行がないということです。
RIGHT JOIN について
RIGHT JOIN は LEFT JOIN の逆で、右側のテーブルを基準にします。
SELECT users.name, orders.product
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;ただし、RIGHT JOIN はあまり使われません。テーブルの順番を入れ替えて LEFT JOIN で書くほうが一般的です。
-- RIGHT JOIN
SELECT u.name, o.product FROM users u RIGHT JOIN orders o ON u.id = o.user_id;
-- 同じ意味の LEFT JOIN(テーブル順を入れ替え)
SELECT u.name, o.product FROM orders o LEFT JOIN users u ON u.id = o.user_id;複数の LEFT JOIN
LEFT JOIN は連続して複数回使えます。
SELECT u.name, o.product, p.price
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
LEFT JOIN products p ON o.product_id = p.id;この場合、users を基準に orders を結合し、さらに products を結合しています。
LEFT JOIN は「存在しないかもしれない関連データ」を扱うときに便利です。「注文のないユーザー一覧」「コメントのない投稿一覧」のような検索でよく使います。











