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

「分かりそう」で「分からない」でも「分かった」気になれる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つのテーブルをくっつけて、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つの合体のさせ方のうち

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

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

それでは、先ほどの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.両方のテーブルの全データを取り出して、すべての組み合わせでくっつける(交差結合)


です。

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

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

左外部結合(LEFT OUTER JOIN)は

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

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

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

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

これが意味するところは

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

です。

右外部結合した際の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つのテーブルを合体させるやり方の1つで、2つ目のテーブルの全データに1つ目のテーブルのデータをくっつけるやり方なんだな~」と、お考えください。

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