概要:このチュートリアルでは、OracleでRIGHT OUTER JOIN
を使って2つ以上のテーブルを結合する方法を学習します。
OracleにおけるRIGHT OUTER JOINの概要
2つのテーブルT1
とT2
があるとすると、次のステートメントは、OracleでRIGHT OUTER JOIN
句を使ってこれら2つのテーブルを結合する方法を示します:
このステートメントのT1
とT2
はそれぞれ左テーブルと右テーブルに相当します。
OUTER
キーワードはオプションなので、RIGHT OUTER JOIN
とRIGHT JOIN
は同じです。
ここで、RIGHT OUTER JOIN
がどのように機能するかを説明します。
T1
テーブルの各行はT2
テーブルの行と比較されます。
- 行のペアが結合述語を満たす場合、両方の行の列値が結合されて結果行となり、それが結果セットに含まれることになります。
-
T2
テーブルの行がT1
テーブルのどの行にも一致しない場合、T2
テーブルの行のカラム値はT1
テーブルの行の各カラムのNULL値と結合されて、結果行となり、これも結果集合に含まれるようになります。
言い換えれば、右外部結合は右のテーブルからすべての行を返し、左のテーブルから一致する行も返します。
Oracle RIGHT OUTER JOIN examples
デモにはサンプルデータベースのorders
とemployees
テーブルを使ってみます。
この図で、セールスマンがひとつまたは複数の販売注文を担当する場合です。
次の例では、すべてのセールスマンとそのセールスオーダーを取得します。
この結果には、役職が Sales Representative
のすべての従業員とそのオーダーが含まれます。
Salesman が Alice Wells
, Charlotte Webb
などのどの販売注文も担当していない場合、order_id
および status
列には NULL 値が入ります。
Oracle RIGHT OUTER JOIN with USING 節
INNER JOIN
, LEFT JOIN
など他の結合同様、テーブル結合時にどの列で等値性をテストするかを指定するのに USING
節が利用可能です。
以下は、USING
句を使用したRIGHT OUTER JOIN
の構文を示しています。
このクエリでは、USING
句にリストされた列はT1
とT2
の両方のテーブルで提示されていなければなりません。
次のステートメントは、上記のステートメントと同等です:
次のステートメントは、 節と RIGHT OUTER JOIN
を使用する方法を示します:
この例では、すべての顧客が結果セットに含まれます。 顧客が販売注文を持っていない場合、order_id
列とstatus
列はNULL値で埋められます。
Oracle RIGHT JOIN: ON vs. WHERE句の条件
次のステートメントはセールスマンID 57の従業員と注文データを取得します。
次のステートメントでは、条件をON
句ではなくWHERE
句に配置します。
クエリーはすべての社員を返しましたが、社員ID57だけが関連する注文データを持ちました。
INNER JOIN
に関して、ON
節に置かれた条件は WHERE
節に置かれた条件と同じ効果を持つことに注意してください。
このチュートリアルでは、複数のテーブルからデータを照会するために Oracle で RIGHT OUTER JOIN
を使用する方法を学びました。