SQL JOINの種類 — INNER、LEFT、RIGHT、FULL、CROSS

SQL JOINの種類の完全ガイド。INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN、CROSS JOIN、セルフジョインを視覚的に解説します。

Clauses & Filters

詳細な説明

SQL JOINの理解

JOINは関連するカラムに基づいて2つ以上のテーブルの行を結合します。正しいJOINタイプを選択することは、正確な結果セットを得るために不可欠です。

INNER JOIN

両方のテーブルに一致する行のみを返します。

SELECT e.name, d.name AS department
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

LEFT JOIN(LEFT OUTER JOIN)

左テーブルのすべての行と、右テーブルの一致する行を返します。一致しない右カラムはNULLになります。

SELECT e.name, d.name AS department
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;

RIGHT JOIN(RIGHT OUTER JOIN)

右テーブルのすべての行と、左テーブルの一致する行を返します。

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

FULL OUTER JOIN

いずれかのテーブルに一致がある行を返します。一致しない側はNULLになります。

SELECT e.name, d.name AS department
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.id;

注意: SQLiteはRIGHT JOINとFULL OUTER JOINをサポートしていません。

CROSS JOIN

デカルト積 — 両テーブルのすべての行の組み合わせを返します。

SELECT s.size, c.color
FROM sizes s CROSS JOIN colors c;

セルフJOIN

テーブルを自身に結合します。階層データによく使用されます:

SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

JOINのパフォーマンスのヒント

  • 常にインデックスが付いたカラムで結合する。
  • WHERE内の暗黙的な結合ではなく、明示的なJOIN構文(JOIN ... ON)を使用する。
  • WHEREで早期にフィルタリングして結合セットを減らす。

ユースケース

複数テーブルのデータを結合するレポートクエリを作成している場合(例えば、従業員を部署に、注文を商品に、ユーザーを住所に結合する場合)。

試してみる — SQL Cheat Sheet

フルツールを開く