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で早期にフィルタリングして結合セットを減らす。
ユースケース
複数テーブルのデータを結合するレポートクエリを作成している場合(例えば、従業員を部署に、注文を商品に、ユーザーを住所に結合する場合)。