右外部結合では、「右側」のテーブルの中の、内部結合の結果に返されない行が、nullで拡張されて外部結合の結果に返されます。
内部/外部テーブルの例
以下の例では、テーブル名としてinner_tableおよびouter_tableを明示的に使用して、単純な右外部結合がSELECT文のFROM句で構築される方法に、こうした用語を関連付ける方法を指示します。内部テーブルと外部テーブルを参照してください。
この例では、右外部結合の内部テーブルや外部テーブル参照の意味について示します。
inner_table RIGHT OUTER JOIN outer_table
セクション1は、outer_tableおよびinner_tableの内部結合(積集合)を表わします。セクション3は、外部テーブルからの一致しない行を表わします。
外部結合の結果には、セクション2と3からの一致している行が含まれますが、図ではセクション1とセクション3からの一致しない行で表わされています。これは、上記のベン図では、濃い影が付いた構成要素で示されている箇所です。
代数の設定では、結果は以下のとおりです。
(Table_A ∩ Table_B) + (Table_B - Table_A)
説明:
Table_A ∩ Table_Bは、Table_AおよびTable_Bの内部結合からの一致する行セットです。
Table_B - Table_Aは、Table_Bからの一致しない行セットです。
右外部結合の実際的な例
offeringsテーブルとenrollmentテーブルの右外部結合を実行した場合、右側のテーブルの中の内部結合の結果に返されない行は、NULLで拡張されて外部結合の結果に返されます。
次のSELECT文は、次のようなテーブルに結果を返します。
SELECT offerings.course_no, offerings.location, enrollment.emp_no FROM offerings RIGHT OUTER JOIN enrollment ON offerings.course_no = enrollment.course_no;
o.course_no | o.location | e.emp_no |
C100 | El Segundo | 236 |
C100 | El Segundo | 668 |
NULL | NULL | 236 |
BTEQレポートはnullを疑問符(?)文字で表わします。
この結果は、C100のコースには2人の従業員が登録されており、従業員236は、別のクラスには登録されていないことを示します。ただし、この場合、従業員236はC300のコースに登録されていることがわかっているため(enrollmentテーブルから)、offeringsテーブルとenrollmentテーブルの右外部結合によって返されたnullは正しくありません。また、C300のコースが現在開催されていないこともわかっています(offeringsテーブルから)。
より有益な結果を得られるように、次の右外部結合を使用します。
SELECT enrollment.course_no,offerings.location,enrollment.emp_no FROM offerings RIGHT OUTER JOIN enrollment ON offerings.course_no = enrollment.course_no;
このクエリーは、行(Null、Null、236)ではなく、行(C300、Null、236)を返します。