左外部結合(LEFT OUTER JOIN)
データベース関連で出てくるよ
2つのテーブルをくっつけて1つのテーブルっぽくするよ
1つ目のテーブルの全データに対して2つ目のテーブルのくっつけられるデータをくっつけるよ
スポンサーリンク
簡単に書くよ
左外部結合(LEFT OUTER JOIN)(読:ヒダリガイブケツゴウ)とは
2つのテーブル
(データベースにおける実際にデータが入っている箱)をくっつけて1つのテーブルっぽくするときの やり方のひとつ
であり
1つ目のテーブルの全データを取り出して、それに2つ目のテーブルのくっつけられるデータをくっつけるやり方
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「データベース」と「テーブル」あとはテーブルの合体について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
データベースは「データを入れておく箱」です。
ただし「データベース」という用語は、実際には もう少し複雑な概念です。
データを入れておく箱そのものは「テーブル」と言います。
とりあえず
データベースの話において、実際にデータを入れておく箱がテーブル
と覚えてください。
さて、このテーブルですが、実は合体できます。
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を使う必要に迫られたら、設計自体を見直すと思います。
せっかくなので、できれば全部まとめて覚えてあげてください。
一言でまとめるよ
まぁ「左外部結合」って単語が出てきたら「2つのテーブル
(データベースにおける実際にデータが入っている箱)を合体させるやり方のひとつで、1つ目のテーブルの全データに2つ目のテーブルのデータをくっつけるやり方なんだな~」と お考えください。





