全外部結合

全外部結合は、SQE 最適化プログラムによってサポートされています。内部、左外部、または左例外のサポートされた結合タイプに、右外部結合および右例外結合が書き換えられるように、全外部結合も書き換えられます。

A FULL OUTER JOIN B の全外部結合は、(A LEFT OUTER JOIN B) UNION ALL (B LEFT EXCEPTION JOIN A) と等価です。 以下の例は、再書き込みについて説明しています。

  SELECT EMPNO, LASTNAME, DEPTNAME 	 
   FROM CORPDATA.EMPLOYEE XXX  	
   FULL OUTER JOIN CORPDATA.DEPARTMENT YYY  
   ON XXX.WORKDEPT = YYY.DEPTNO

この照会は、次のように書き直されます。

 SELECT EMPNO, LASTNAME, DEPTNAME 	 
  FROM CORPDATA.EMPLOYEE XXX  	
  LEFT OUTER JOIN CORPDATA.DEPARTMENT YYY  	
    ON XXX.WORKDEPT = YYY.DEPTNO
 UNION ALL 
 SELECT EMPNO, LASTNAME, DEPTNAME 	 
  FROM CORPDATA.DEPARTMENT YYY  	
  LEFT EXCEPTION JOIN CORPDATA.EMPLOYEE XXX  	
  ON XXX.WORKDEPT = YYY.DEPTNO

複数の FULL OUTER JOIN 要求による照会 (例えば、A FULL OUTER JOIN B FULL OUTER JOIN C) は、迅速にこの複雑な再書き込み状態になります。この複雑化は、以下の例で示されています。

ライブ・データ・モードで実行されない場合、最適化プログラムは、中間結果を一時データ・オブジェクトにカプセル化することによって、最適化中および実行時の両方でパフォーマンスを促進できます。 このオブジェクトは、いったん最適化すれば、書き換えのスキャンされた側とプローブされた側の両方に差し込むことができます。 これらの共有された一時オブジェクトにより、要求を満たすために特定のテーブルを何度もパススルーする必要がなくなります。

この例では、(A FULL OUTER JOIN B) の結果が、C との FULL OUTER 結合中にカプセル化の候補になります。

A FULL OUTER JOIN B  FULL OUTER JOIN C

この照会は、次のように書き直されます。

 ((A LEFT OUTER JOIN B) UNION ALL (B LEFT EXCEPTION JOIN A)) LEFT OUTER JOIN C ) 
 UNION ALL
 (C LEFT EXCEPTION JOIN ((A LEFT OUTER JOIN B) UNION ALL (B LEFT EXCEPTION JOIN A))

FULL OUTER は、結合要求の両サイドが、結果の応答セットに NULL 値を生成できることを暗黙に示します。 照会の WHERE 文節内でのローカル選択の結果として、FULL OUTER は LEFT OUTER または INNER JOIN に適切にダウングレードされることになります。

FULL OUTER JOIN 動作を必要としていて、ローカル選択を適用する場合は、FULL OUTER JOIN の ON 文節でローカル選択を指定するか、または共通表式を使用します。 たとえば、次のとおりです。

 WITH TEMPEMP AS (SELECT * FROM CORPDATA.EMPLOYEE XXX WHERE SALARY > 10000)  
 SELECT EMPNO, LASTNAME, DEPTNAME 	 
   FROM TEMPEMP XXX  	
   FULL OUTER JOIN CORPDATA.DEPARTMENT YYY  
   ON XXX.WORKDEPT = YYY.DEPTNO