外部結合演算子
照会の WHERE 節の述部内で外部結合演算子 (+) を代替構文として使用できます。この機能は、Db2® Warehouse on Cloud 管理対象サービスのエントリー・プランには適用されません。
結合とは、情報の何らかの共通の領域に基づいて複数の表のデータを組み合わせるプロセスのことです。 1 つの表の行は別の表の行と、 対応する行の情報が合致する場合に結合基準に基づいて組にされます。 外部結合では結合条件を満たすすべての行が戻されると同時に、結合条件を満たしていない行に関しても、片方または両方の表の行すべてまたはその一部が戻されます。 可能な場合には、外部結合構文である RIGHT OUTER JOIN、LEFT OUTER JOIN、FULL OUTER JOIN のいずれかを使用してください。
例
以下の例に示されているように、外部結合演算子 (+) は括弧に入れて、2 つの表の列を参照する述部内で列名に続いて適用します。
- 以下の照会は、表 T1 と T2 の左外部結合を実行します。 FROM 節に両方の表をコンマで区切って含めます。
この外部結合演算子を、T1 も参照する述部内の T2 のすべての列に適用します。
前述の照会は、外部結合演算子を使用する次の照会と同等です。SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.PK1 = T2.FK1 AND T1.PK2 = T2.FK2SELECT * FROM T1, T2 WHERE T1.PK1 = T2.FK1(+) AND T1.PK2 = T2.FK2(+) - 以下の照会は、表 T1 と T2 の右外部結合を実行します。 FROM 節に両方の表をコンマで区切って含め、T2 も参照する述部内の T1 のすべての列に外部結合演算子を適用します。
前述の照会は、外部結合演算子を使用する次の照会と同等です。SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.FK1 = T2.PK1 AND T1.FK2 = T2.PK2SELECT * FROM T1, T2 WHERE T1.FK1(+) = T2.PK1 AND T1.FK2(+) = T2.PK2
AND 演算子で区切られる述部のセットは AND ファクター と呼ばれます。 WHERE 節に AND 演算子がない場合は、WHERE 節内の一連の述部が唯一の AND ファクターであると見なされます。
規則
外部結合演算子には、以下の規則が適用されます。
- 述部
- WHERE 述部は、ANDed Boolean 値ファクターの細分単位と見なされます。
T1.A(+) = 5などのローカルの述部を指定することはできますが、結合と合わせて実行されます。 (+) のないローカル述部は、結合の後に実行できます。
- Boolean
- 各 Boolean 値が参照できる表は 2 つまでです。例えば
T1.C11 + T2.C21 = T3.C3(+)は許可されていません。 - 外部結合 Boolean 値項の相関は許可されていません。
- 各 Boolean 値が参照できる表は 2 つまでです。例えば
- 外部結合演算子
- 外部結合演算子は、明示的な JOIN 構文と同じ副選択で指定することはできません。
- 外部結合演算子は、同じ副選択の FROM 節で指定した表に関連付けられている列の、WHERE 節でのみ指定できます。
- 外部結合演算子は、式全体に適用することはできません。
AND ファクター内では、同じ表による列参照には、それぞれ外部結合演算子 (例えば
T1.COL1 (+) - T1.COL2 (+) = T2.COL1) を付ける必要があります。 - 外部結合演算子は、同じ副選択の FROM 節で指定した表に関連付けられている列の、WHERE 節でのみ指定できます。
- NULL プロデューサー
- 各表は、他の最大 1 つの表に関して NULL プロデューサーになることができます。 表を 3 番目の表に結合する場合は、外部表にする必要があります。
- 表を照会内の 1 つの他の表に対する NULL プロデューサーとして使用できるのは 1 回のみです。
- 循環を形成する別個の外部結合内では、同じ表参照を外部表と NULL プロデューサーの両方として使用することはできません。 循環は、一連の述部が以前の表に戻された場合に、複数の結合にわたって形成される場合があります。 例えば、以下の照会の場合、最初の述部で T1 が外部表になっており、3 番目の述部で再び T1 に戻っています。 T2 が最初の述部の NULL プロデューサーと 2 番目の述部の外部表の両方として使用されていますが、これ自体は循環にはなりません。
SELECT ... FROM T1,T2,T3 WHERE T1.a1 = T2.b2(+) AND T2.b2 = T3.c3(+) AND T3.c3 = T1.a1(+) -- 不正な循環
- AND ファクター
- AND ファクターは、NULL プロデューサーとして 1 つの表のみ指定することができます。 外部結合演算子が付いた列参照は、同じ表を使用する必要があります。
- 外部結合演算子を含む AND ファクターは、最大 2 つの表を参照することができます。
- 2 つの表の間の外部結合で複数の AND ファクターが必要になる場合は、それらの AND ファクターのすべてで外部結合演算子を指定する必要があります。 AND ファクターが外部結合演算子を指定しない場合は、外部結合の結果によって処理されます。
- 1 つの表だけが関連する述部を持つ AND ファクターは、以下の基準を満たす他の AND ファクターが少なくとも 1 つ存在すれば、外部結合演算子を指定することができます。
- AND ファクターには、NULL プロデューサーと同じ表が関係していなければなりません。
- AND ファクターには、外部表とは別の表が関係していなければなりません。
- 1 つの表だけを行う述部を持ち、外部結合演算子がない AND ファクターは、結合の結果によって処理されます。
- 外部結合演算子を含む AND ファクターは、結合表で定義されている ON 節の結合条件の規則に従う必要があります。