SQL RIGHT JOIN -- 右テーブルのすべての行を保持

SQL RIGHT JOINが右テーブルのすべての行を保持し、マッチしない左テーブルのカラムにNULLを埋める仕組みを学びます。構文、図、実際の使用例。

JOIN Types

詳細な説明

RIGHT JOINとは?

RIGHT JOIN(またはRIGHT OUTER JOIN)はLEFT JOINの鏡像です。右テーブルのすべての行と左テーブルのマッチする行を返します。左側にマッチがない場合、それらのカラムはNULLで埋められます。

構文

SELECT e.name, e.hire_date, d.department_name
FROM employees AS e
RIGHT JOIN departments AS d
  ON e.department_id = d.id;

動作の仕組み

  1. departments(右テーブル)のすべての行から開始します。
  2. 各部署について、e.department_id = d.idの条件でemployeesのマッチする行を検索します。
  3. マッチがあれば、結合行を出力します。
  4. 部署に所属する従業員がいない場合、従業員カラムにNULLを入れて部署行を出力します。

ベン図の解釈

RIGHT JOINは右円全体をハイライトします。共通部分にはマッチしたデータが含まれ、右のみの領域には従業員が配属されていない部署(左カラムはNULL)を表します。

RIGHT JOINが使われにくい理由

実際には、ほとんどの開発者がテーブルの順序を入れ替えてLEFT JOINに書き直します:

-- 同等のLEFT JOINバージョン
SELECT e.name, e.hire_date, d.department_name
FROM departments AS d
LEFT JOIN employees AS e
  ON e.department_id = d.id;

これは同じ結果を生成し、「主」テーブルがFROM句に最初に現れるため、より読みやすいと考えられています。一部のSQLスタイルガイドでは、一貫性のためにRIGHT JOINを避けてLEFT JOINを使用することを明示的に推奨しています。

RIGHT JOINが適切な場合

RIGHT JOINは、保持したいテーブルが既存の結合チェーンの右側にある複数結合クエリで有用です。そのようなクエリをLEFT JOINに書き直すとクエリ全体の再構築が必要になることがあるため、RIGHT JOINの方がシンプルに保てます。

ユースケース

テーブルの順序を書き直さずに、クエリの2番目のテーブルのすべてのレコードが必要な場合にRIGHT JOINを使用します。例えば、従業員が配属されていない部署も含むすべての部署を一覧表示する場合です。

試してみる — SQL JOIN Visualizer

フルツールを開く