[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

左外部結合 (LEFT OUTER JOIN)

pointこの用語のポイント

pointデータベース関連で出てくるよ

point2つのテーブルをくっつけて1つのテーブルっぽくするよ

point1つ目のテーブルの全データに対して2つ目のテーブルのくっつけられるデータをくっつけるよ

スポンサーリンク

簡単に書くよ

左外部結合 (LEFT OUTER JOIN)とは

2つのテーブルをくっつけて1つのテーブルっぽくする際のやり方のひとつで、1つ目のテーブルの全データを取り出して、それに2つ目のテーブルのくっつけられるデータをくっつけるやり方
です。

image piyo

詳しく書くよ

順番に見ていきましょう。

データベースは「データを入れておく箱」ね。

左外部結合

ただし「データベース」という用語は、実際には、もう少し複雑な概念です。
データを入れておく箱そのものは「テーブル」と言います。

取りあえず

データベース関連で出てくる用語で、実際にデータを入れておく箱が「テーブル」

と覚えてください。

さて、このテーブルですが、実は合体できます。
2つのテーブルをくっつけて、1つのテーブルっぽくできるのです。

例えば、そうですね。

以下の2つのテーブルがあったとしましょう。

■1つ目のテーブル(テーブル1)

名前性別
ピヨ太
ピヨ子
ピヨ太ママ


■2つ目のテーブル(テーブル2)
名前年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパおっさん


1つ目のテーブル(テーブル1)には「名前」と「性別」があります。
2つ目のテーブル(テーブル2)には「名前」と「年齢」があります。

「名前」に注目すると、何となく合体できそうな気がしませんか?

実際問題、合体できます。

それでは「名前」に注目して2つのテーブルを合体させてみましょう。

このときの合体のさせ方には、いくつかのやり方があります。
一般的なのは

1.2つのテーブルの合体可能なデータのみ取り出す
2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける
3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける
4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける
5.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける


の5つです。

よく登場するのは1と2ですけどね。
3は2を逆にしただけなので、あまり使いません。
3を使いたいときはテーブルの順番を入れ替えて2を使います。
4はデータベースの種類によっては、使えなかったりします。
5は特殊なので、ひとまず忘れてください。

この5つの合体のさせ方のうち

2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける

やり方を指す呼び名が「左外部結合」です。
実際のSQL(データベースとやり取りをするときに使う言葉)では「LEFT OUTER JOIN」や「LEFT JOIN」と書きます。

それでは、先ほどの2つのテーブル

■1つ目のテーブル(テーブル1)
名前性別
ピヨ太
ピヨ子
ピヨ太ママ


■2つ目のテーブル(テーブル2)
名前年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパおっさん


を「名前」に注目して左外部結合してみましょう。
テーブル1とテーブル2を合体して、新たに「名前」と「性別」と「年齢」があるテーブルを作るとします。

まずは、テーブル1のデータを全部並べます。
「年齢」は空欄にして、合体後のテーブルを作ってみましょう。

合体後のテーブルは、取りあえず以下のようになります。

■合体後のテーブル
名前性別年齢
ピヨ太
ピヨ子
ピヨ太ママ


次に、テーブル2を見てください。
テーブル2には「名前」が「ピヨ太」のデータがあります。

■2つ目のテーブル(テーブル2)
名前年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパおっさん


ふむ、名前が「ピヨ太」の年齢は「成人済み」みたいですね。
これを合体後のテーブルにくっつけましょう。

合体後のテーブルは、以下のようになります。

■合体後のテーブル
名前性別年齢
ピヨ太成人済み
ピヨ子
ピヨ太ママ


次に、もう一度テーブル2を見てください。
テーブル2には「名前」が「ピヨ子」のデータもあります。

■2つ目のテーブル(テーブル2)
名前年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパおっさん


ふむ、名前が「ピヨ子」の年齢は「永遠の17歳」みたいですね。
これを合体後のテーブルにくっつけましょう。

合体後のテーブルは、以下のようになります。

■合体後のテーブル
名前性別年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太ママ


次に、もう一度テーブル2を見てください。
テーブル2には「名前」が「ピヨ太ママ」のデータはありません。

■2つ目のテーブル(テーブル2)
名前年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパおっさん


ないものは、仕方がありませんね。
合体後のテーブルにおける「ピヨ太ママ」の「年齢」は空けておきます。

■合体後のテーブル
名前性別年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太ママ(空欄)


これでテーブルの合体作業は完了です。
合体後のテーブルは、以下の通りです。

名前性別年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太ママ(空欄)


このように、1つ目のテーブルの全データに対して、くっつけられる範囲で2つ目のテーブルのデータをくっつける合体のやり方が「左外部結合」です。
実際のSQLでは、以下のように書きます。

SELECT
 【テーブル1】.【名前】
 ,【テーブル1】.【性別】
 ,【テーブル2】.【年齢】
FROM
 【テーブル1】
LEFT OUTER JOIN
 【テーブル2】
ON
 【テーブル1】.【名前】 = 【テーブル2】.【名前】


なお

1.2つのテーブルの合体可能なデータのみ取り出す
2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける
3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける
4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける
5.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける


のうち、1は「内部結合(INNER JOIN)」と言います。
3は「右外部結合(RIGHT OUTER JOIN)」です。
4は「完全外部結合(FULL OUTER JOIN)」です。
5は「交差結合(CROSS JOIN)」と言います。

まとめて書くと

1.2つのテーブルの合体可能なデータのみ取り出す(内部結合)
2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける(左外部結合)
3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける(右外部結合)
4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける(完全外部結合)
5.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける(交差結合)


です。

1を「内部結合」と呼ぶのと対比させて、2~4をまとめて「外部結合」と呼ぶ場合もあります。
5は特殊というか、あまり登場しないはずです。
少なくとも私は、お仕事で5を使ったことはありません。
性能面でもイマイチになりそうなので、5を使う必要に迫られたら、設計自体を見直すと思います。

せっかくなので、できれば全部まとめて覚えてあげてください。

image piyo2

一言でまとめるよ

まぁ「左外部結合」って単語が出てきたら「2つのテーブルを合体させるやり方の1つで、1つ目のテーブルの全データに2つ目のテーブルのデータをくっつけるやり方なんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク