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

右外部結合(RIGHT OUTER JOIN)

pointこの用語のポイント

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

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

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

point普通は、左外部結合(LEFT OUTER JOIN)に書き換えるよ

スポンサーリンク

簡単に書くよ

右外部結合(RIGHT OUTER JOIN)(読:ミギガイブケツゴウ)とは

「左外部結合(LEFT OUTER JOIN)」の逆。
もう少し具体的に書くと

2つのテーブル(データベースにおける実際にデータが入っている箱)をくっつけて1つのテーブルっぽくするときの やり方のひとつ
であり

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


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として「データベース」と「テーブル」あとはテーブルの合体について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

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

右外部結合

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

右外部結合2

とりあえず

データベースの話において、実際にデータを入れておく箱がテーブル

と覚えてください。

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

例えば、そうですね。

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

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

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


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


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

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

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

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

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

1.2つのテーブルの合体可能なデータのみ取り出す
右外部結合3

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

3.テーブル2の全データを取り出して、それにテーブル1のデータをくっつける
右外部結合5

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

5.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける
右外部結合7

の5つです。

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

以上を踏まえて、5つの合体のさせ方のうち

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

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

右外部結合8

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

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


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


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

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

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

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


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

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


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

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

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


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

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


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

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

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


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

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


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

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


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

名前性別年齢
ピヨ太成人済み
ピヨ子永遠の17歳
ピヨ太パパ(空欄)おっさん


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

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


なお

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


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

まとめて書くと

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


です。

右外部結合9

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

せっかくなので、ここまでを踏まえて、もう一段階、踏み込んで考えてみましょう。
左外部結合(LEFT OUTER JOIN)に注目してください。

左外部結合(LEFT OUTER JOIN)

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

です。
右外部結合(RIGHT OUTER JOIN)である

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

とは、テーブル1とテーブル2が逆になっただけですよね。

これが意味するところは

テーブルの順番を入れ替えれば、左外部結合と右外部結合を書き換えられる

です。

右外部結合10

右外部結合したときのSQLの書き方は

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


でした。

これを、実行結果を変えないで左外部結合に書き換えると

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


に なります。

「FROM」以降の【テーブル1】と【テーブル2】が置き換わっていますよね。
テーブルを指定する順番を変えれば、左外部結合と右外部結合を書き換えられます。

この話のポイントは

基本的に右外部結合は左外部結合に書き換えられる

です。

特に、左外部結合と右外部結合が混在すると、えらいこっちゃな結果になることが少なくありません。
原則として右外部結合は使わず、すべて左外部結合で書く方が無難だと思います。


image piyo2

一言でまとめるよ

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

一番上に戻るよ
スポンサーリンク
書籍画像048
書籍画像054


書籍画像
わわわ説明術コラム
宣伝だよ
インフルエンサー六法 活動開始から情報発信、収益化までに潜むトラブル対策50
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
実践サイバーセキュリティ入門講座 現場に残された痕跡からハッカーの攻撃を暴け