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

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

完全外部結合 (FULL OUTER JOIN)

pointこの用語のポイント

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

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

point両方のテーブルの全データを取り出すよ

pointくっつけられる範囲でくっつけるよ

スポンサーリンク

簡単に書くよ

完全外部結合 (FULL OUTER JOIN)とは

2つのテーブルをくっつけて1つのテーブルっぽくする際のやり方のひとつ
であり

両方のテーブルの全データを取り出して、くっつけられる範囲でくっつけるやり方
です。

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つの合体のさせ方のうち

4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける

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

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

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


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


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

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

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


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


ふむ、これなら「名前」と「性別」と「年齢」が揃いますね。
くっつけて合体後のテーブルに入れてしまいましょう。

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


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

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


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


ふむ、これも「名前」と「性別」と「年齢」が揃いますね。
くっつけて合体後のテーブルに入れてしまいましょう。

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


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

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


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


ふむ、これでは「名前」と「性別」と「年齢」が揃いませんね。
ドンマイです。
分かる範囲で合体後のテーブルに入れてしまいましょう。
「名前」と「性別」は分かるので「ピヨ太ママ」と「女」を入れます。
「年齢」は分からないので空欄にしておきます。

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


これで、テーブル1のすべてのデータが合体後のテーブルに入りました。
次に、テーブル2にあってテーブル1にないデータを合体後のテーブルに入れます。

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

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


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


ふむ、これでは「名前」と「性別」と「年齢」が揃いませんね。
ドンマイです。
分かる範囲で合体後のテーブルに入れてしまいましょう。
「名前」と「年齢」は分かるので「ピヨ太パパ」と「おっさん」を入れます。
「性別」は分からないので空欄にしておきます。

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


これで合体は終了です。
合体後のテーブルには、テーブル1とテーブル2のすべてのデータが、くっつけられるかぎりくっつけられて入っています。

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


このように、2つのテーブルの

1.全データを取り出して
2.くっつけられる範囲でくっつける


合体のやり方が「完全外部結合」です。
実際のSQLでは、以下のように書きます。

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


なお

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


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

まとめて書くと

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


です。

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

以上を踏まえて、もう少し補足しておきます。

完全外部結合のイメージは

内部結合+左外部結合+右外部結合

です。

1.2つのテーブルの合体可能なデータのみ取り出す(内部結合)
2.テーブル1の全データを取り出して、それにテーブル2のデータをくっつける(左外部結合)
3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける(右外部結合)


を、それぞれ実行した結果をくっつけて重複する部分を除くと

4.両方のテーブルの全データを取り出して、くっつけられる範囲でくっつける(完全外部結合)

になります。

image piyo2

一言でまとめるよ

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

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