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 JOINLEFT 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 と同じ動作になります。