英語607877 views
中学数学621382 views
りんご192546 views
いろは2986023 views
小学理科717236 views
小学社会308636 views
Computer365120 views
中学社会667106 views
高校生物549842 views
高校倫理1433119 views
Help
Tools

English

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;

結果は次のようになります。

nameproduct
田中りんご
田中みかん
鈴木バナナ
佐藤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 は「存在しないかもしれない関連データ」を扱うときに便利です。「注文のないユーザー一覧」「コメントのない投稿一覧」のような検索でよく使います。