JOINによるテーブルの結合方法5種類を整理

最終更新日 2018/02/07

内部結合:共通部分だけをとってくる
左外部結合:左にあるものを全部とってくる
右外部結合:右にあるものを全部とってくる
完全外部結合:どちらかにあれば全部とってくる

テーブルの結合のイメージ

内部結合(INNER JOIN)

「両方のテーブルにある行」のみを取り出して結合することを内部結合と言います。

例えば、

名前 年齢
Aさん 20
Bさん 30
Cさん 40
名前 年収
Aさん 300
Dさん 600

という2つのテーブルを(名前列を使って)内部結合すると、

名前 年齢 年収
Aさん 20 300

となります。「両方のテーブルにある行」はAさんだけだからです。

SQL文で書くと、
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.名前 = 表2.名前
という感じになります。

左外部結合(LEFT OUTER JOIN)

「1つ目のテーブルにある行」を全て取り出して結合することを左外部結合と言います。

例えば、

名前 年齢
Aさん 20
Bさん 30
Cさん 40
名前 年収
Aさん 300
Dさん 600

という2つのテーブルを(名前列を使って)左外部結合すると、

名前 年齢 年収
Aさん 20 300
Bさん 30 NULL
Cさん 40 NULL

となります。「1つ目のテーブルにある行」はAさん、Bさん、Cさんの3行だからです。Bさん、Cさんの年収は不明なのでNULLになります。

SQL文で書くと、
SELECT * FROM 表1 LEFT OUTER JOIN 表2 ON 表1.名前 = 表2.名前
という感じになります。

右外部結合(RIGHT OUTER JOIN)

「2つ目のテーブルにある行」を全て取り出して結合することを右外部結合と言います。

例えば、

名前 年齢
Aさん 20
Bさん 30
Cさん 40
名前 年収
Aさん 300
Dさん 600

という2つのテーブルを(名前列を使って)右外部結合すると、

名前 年齢 年収
Aさん 20 300
Dさん NULL 600

となります。「2つ目のテーブルにある行」はAさん、Dさんの2行だからです。Dさんの年齢は不明なのでNULLになります。

SQL文で書くと、
SELECT * FROM 表1 RIGHT OUTER JOIN 表2 ON 表1.名前 = 表2.名前
という感じになります。

完全外部結合(FULL OUTER JOIN)

「1つ目のテーブルまたは2つ目のテーブルにある行」を全て取り出して結合することを完全外部結合と言います。

例えば、

名前 年齢
Aさん 20
Bさん 30
Cさん 40
名前 年収
Aさん 300
Dさん 600

という2つのテーブルを(名前列を使って)完全外部結合すると、

名前 年齢 年収
Aさん 20 300
Bさん 30 NULL
Cさん 40 NULL
Dさん NULL 600

となります。「1つ目のテーブルまたは2つ目のテーブルにある行」はAさん、Bさん、Cさん、Dさんの4行だからです。

SQL文で書くと、
SELECT * FROM 表1 FULL OUTER JOIN 表2 ON 表1.名前 = 表2.名前
という感じになります。

交差結合(CROSS JOIN)

2つのテーブルの全組合せを取り出すような結合を交差結合と言います。

いわゆる直積と呼ばれるものです。他の4つとは性質が違います。例えば、

名前 年齢
Aさん 20
Bさん 30
Cさん 40
名前 年収
Aさん 300
Dさん 600

という2つのテーブルを交差結合すると、

名前 年齢 名前 年収
Aさん 20 Aさん 300
Bさん 30 Aさん 300
Cさん 40 Aさん 300
Aさん 20 Dさん 600
Bさん 30 Dさん 600
Cさん 40 Dさん 600

となります。

SQL文で書くと、
SELECT * FROM 表1 CROSS JOIN 表2
という感じになります。

次回は 最急降下法のイメージと例 を解説します。

ページ上部へ戻る