SQLのJOIN 3種類の違いを図解でわかりやすく解説
JOINとは
SQLのJOINは、2つ以上のテーブルを結合してデータを取得する命令です。例えば「社員テーブル」と「部署テーブル」を結合して、「社員名と所属部署名」を一度に取得するときに使います。
JOINには主に3種類あり、どのデータを残すかによって使い分けます。
① INNER JOIN(内部結合)
両方のテーブルに一致するデータが存在する行だけを返します。最も基本的なJOINです。
SELECT e.name, d.name AS department
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;イメージ: 2つの円(ベン図)の重なっている部分だけを取得する。
どちらかのテーブルにしかないデータは結果に含まれません。「部署が設定されていない社員」や「社員が一人もいない部署」は取得されません。
② LEFT JOIN(左外部結合)
左テーブルのデータをすべて取得し、右テーブルに一致するものがあればその情報も表示します。一致しない場合はNULLになります。
SELECT e.name, d.name AS department
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;イメージ: 左の円を全部残しつつ、右の円と重なる部分の情報も付け加える。
「部署が設定されていない社員も含めて全社員を取得したい」というケースに最適です。部署なしの社員は department カラムがNULLになります。
実務ではLEFT JOINが最もよく使われます。「全ユーザーを取得して、注文があればその情報も表示する」といったケースがまさにこれです。
③ RIGHT JOIN(右外部結合)
右テーブルのデータをすべて取得し、左テーブルに一致するものがあればその情報も表示します。
SELECT e.name, d.name AS department
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;「社員がいない部署も含めて全部署を取得したい」ときに使います。LEFT JOINでテーブルの順序を入れ替えれば同じ結果が得られるため、RIGHT JOINはあまり使われません。
3種類の比較まとめ
- INNER JOIN:両方に一致するデータのみ取得
- LEFT JOIN:左テーブルを全件取得(右は一致すれば表示、なければNULL)
- RIGHT JOIN:右テーブルを全件取得(左は一致すれば表示、なければNULL)
どのJOINを使えばいい?
- 「両方に存在するデータだけ欲しい」→ INNER JOIN
- 「片方のテーブルは全件欲しい」→ LEFT JOIN(左側に全件欲しいテーブルを置く)
まずLEFT JOINを使うことを試みて、不要なデータが含まれるようであればINNER JOINに切り替えるのが実践的なアプローチです。
JOINの練習問題に挑戦しよう
SQLLearnのJOINレッスンでは、実際のテーブルデータを使いながらINNER JOIN・LEFT JOINをブラウザ上で練習できます。登録不要・無料です。
無料で今すぐ練習する →