INNER JOINとLEFT JOINの違い:複数テーブルをつなぐ基本

入門 | 10分 で読める | 2026.06.17

公式ドキュメント

Webアプリのデータは、1つのテーブルだけで完結しないことが多いです。ユーザー、注文、商品、コメントなどを分けて保存し、必要なときにJOINでつなぎます。

一言でいうと

JOINは、別々のテーブルに分かれたデータを、共通するキーを使って1つの結果として読むための仕組みです。

例にするテーブル

usersorders を考えます。

users.idusers.name
1Sato
2Suzuki
3Tanaka
orders.idorders.user_idorders.total
10113000
10211500
10325000

orders.user_idusers.id を参照しています。

INNER JOIN

INNER JOIN は、両方のテーブルで対応する行がある場合だけ結果に残します。

SELECT users.name, orders.total
FROM users
INNER JOIN orders ON users.id = orders.user_id;

この結果には、注文があるユーザーだけが出ます。注文がない Tanaka は出ません。

nametotal
Sato3000
Sato1500
Suzuki5000

INNER JOINは「両方に存在するデータだけ」を見たいときに使います。

LEFT JOIN

LEFT JOIN は、左側のテーブルの行を必ず残します。右側に対応する行がない場合、右側の列は NULL になります。

SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

この結果には、注文がないユーザーも出ます。

nametotal
Sato3000
Sato1500
Suzuki5000
TanakaNULL

LEFT JOINは「右側にデータがなくても、左側の一覧を残したい」ときに使います。

ON条件の役割

ON は、どの列同士を対応させるかを指定します。

ON users.id = orders.user_id

これは、「ユーザーの id と注文の user_id が一致する行をつなぐ」という意味です。

JOINで結果がおかしいときは、まず ON 条件を確認します。

WHEREとの違い

JOINの ONWHERE は役割が違います。

役割
ONテーブル同士のつなぎ方を決める
WHEREJOIN後の結果を絞り込む

特に LEFT JOIN では、右側テーブルの条件を WHERE に書くと、意図せず INNER JOIN のような結果になることがあります。

どちらを使うか

やりたいこと使うJOIN
注文があるユーザーだけ見たいINNER JOIN
注文がないユーザーも含めたいLEFT JOIN
親データ一覧を全部出したいLEFT JOIN
関連データが存在するものだけ出したいINNER JOIN

よくある誤解

誤解実際
JOINはテーブルを物理的に合体する結果として一時的につないで表示します
LEFT JOINは常に安全WHERE条件次第で意図しない結果になります
ON条件は何でもよい間違えると件数が増えたり減ったりします
JOINは必ず重い適切なキーとインデックスがあれば一般的に使われます

まとめ

INNER JOIN は両方に対応する行があるものだけを返し、LEFT JOIN は左側の行を残したまま右側の情報をつなぎます。JOINを読むときは、まず対象テーブル、次に ON 条件、最後に WHERE 条件を確認します。

参考リソース

← 一覧に戻る
PR
PR
PR
PR