右外部結合 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

右外部結合では、「右側」のテーブルの中の、内部結合の結果に返されない行が、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_ATable_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)を返します。