← ブログ一覧に戻る
SQLのJOIN 3種類の違いを図解でわかりやすく解説
更新:

SQLのJOIN 3種類の違いを図解でわかりやすく解説

JOINとは

SQLのJOINは、2つ以上のテーブルを結合してデータを取得する命令です。例えば「社員テーブル」と「部署テーブル」を結合して、「社員名と所属部署名」を一度に取得するときに使います。

JOINには主に3種類あり、どのデータを残すかによって使い分けます。

まずはブラウザでJOINを動かしてみよう

SQLLearnでは実際にJOINを書いて結果を確認できる練習問題を無料で提供しています。

無料で今すぐ練習する →

① 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をブラウザ上で練習できます。登録不要・無料です。

無料で今すぐ練習する →