概要:このチュートリアルでは、OracleでRIGHT OUTER JOINを使って2つ以上のテーブルを結合する方法を学習します。

OracleにおけるRIGHT OUTER JOINの概要

2つのテーブルT1T2があるとすると、次のステートメントは、OracleでRIGHT OUTER JOIN句を使ってこれら2つのテーブルを結合する方法を示します:

このステートメントのT1T2はそれぞれ左テーブルと右テーブルに相当します。

OUTERキーワードはオプションなので、RIGHT OUTER JOINRIGHT JOINは同じです。

ここで、RIGHT OUTER JOINがどのように機能するかを説明します。

T1テーブルの各行はT2テーブルの行と比較されます。

  • 行のペアが結合述語を満たす場合、両方の行の列値が結合されて結果行となり、それが結果セットに含まれることになります。
  • T2テーブルの行がT1テーブルのどの行にも一致しない場合、T2テーブルの行のカラム値はT1テーブルの行の各カラムのNULL値と結合されて、結果行となり、これも結果集合に含まれるようになります。

言い換えれば、右外部結合は右のテーブルからすべての行を返し、左のテーブルから一致する行も返します。

Oracle RIGHT OUTER JOIN examples

デモにはサンプルデータベースのordersemployeesテーブルを使ってみます。

この図で、セールスマンがひとつまたは複数の販売注文を担当する場合です。

次の例では、すべてのセールスマンとそのセールスオーダーを取得します。

この結果には、役職が 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句にリストされた列はT1T2の両方のテーブルで提示されていなければなりません。

次のステートメントは、上記のステートメントと同等です:

次のステートメントは、 節と 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 を使用する方法を学びました。

admin

コメントを残す

メールアドレスが公開されることはありません。

lg