SQL結合の解説:INNER、LEFT、RIGHT、CROSS(とカンマ結合)
Published: 2026-02-04
SQLの結合は、関連する列に基づいて2つのテーブルの行を結合するための仕組みです。この短いチュートリアルでは、4つの基本的な結合タイプを紹介し、カンマ結合がCROSS JOINと同じである理由を説明します。
サンプルデータ
すべての例で次の2つのテーブルを使います。
employees テーブル:
| id | name | dept_id |
|---|---|---|
| 1 | Ava | 10 |
| 2 | Ben | 20 |
| 3 | Cara | NULL |
departments テーブル:
| dept_id | dept_name |
|---|---|
| 10 | Sales |
| 20 | Engineering |
| 30 | Support |
ブラウザで結合を試してみる
サンプルクエリはページ上でそのまま実行できます。クエリを編集して Run をクリックしてください。
INNER JOIN
両方のテーブルで一致する行だけを返します。
結果: Ava/Sales、Ben/Engineering。Caraは対応する部署がないため除外され、Supportは部署30に所属する従業員がいないため除外されます。
LEFT JOIN (LEFT OUTER JOIN)
左側のテーブルのすべての行と、右側テーブルの一致する行を返します。一致しない右側はNULLになります。
結果: Ava/Sales、Ben/Engineering、Cara/NULL。すべての従業員が保持されます。
RIGHT JOIN (RIGHT OUTER JOIN)
右側のテーブルのすべての行と、左側テーブルの一致する行を返します。一致しない左側はNULLになります。
結果: Ava/Sales、Ben/Engineering、NULL/Support。すべての部署が保持されます。
注意: 多くの開発者は、可読性と一貫性のために、テーブルの順序を入れ替えて
RIGHT JOINをLEFT JOINに書き換えることを好みます。
CROSS JOIN
2つのテーブルのデカルト積(すべての組み合わせ)を返します。
結果: 3 × 3 = 9行(すべての従業員とすべての部署の組み合わせ)。
カンマ結合(レガシー構文)
カンマ結合はCROSS JOINと同じです。FROM 句でテーブルをカンマ区切りで列挙します:
これは CROSS JOIN と同じデカルト積を生成します。WHERE 句でフィルタを追加すると、INNER JOINのように振る舞います:
依然として有効な構文ではありますが、カンマ構文は結合ロジックとフィルタを混在させてしまい、読みづらくなるため時代遅れと見なされています。明示的な JOIN ... ON 構文を使うことを推奨します。
DbGate: 列展開時の自動LEFT JOIN
DbGateのデータブラウザでは、外部キー列を展開すると、自動的に LEFT JOIN を使ったクエリが生成され、メインテーブルの行を落とさずに関連データを取得します。これにより、基礎となるデータセットをそのまま保ちつつ、関連フィールドをすぐに利用できるようになります。
まとめ
INNER JOINは一致する行だけを保持します。LEFT JOINは左側テーブルのすべての行を保持します。RIGHT JOINは右側テーブルのすべての行を保持します。CROSS JOINはすべての組み合わせを返します。- カンマ結合は
CROSS JOINと同じであり、WHEREでフィルタするとINNER JOINと同じ動作になります。