joined-table
結合テーブルは、内部結合、外部結合、またはクロス結合の結果である中間結果テーブルを指定します。 この表は、結合演算子 INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER、または CROSS のいずれかをそのオペランドに適用して得ることができます。
クロス結合は、表のクロス積を表し、左側の表の各行は右側の表の各行と結合されます。 内部結合は、表のクロス積と見なすことができ、結合条件が真である行のみを保持します。 結果表では、結合された表の一方または両方からの行が欠落している場合があります。 外部結合には、内部結合によって生成される行と、外部結合のタイプに 基づいて、内部結合では欠落する行が以下のように含まれます。
- 左外部結合
- 左外部結合の結果には、内部結合で欠落していた左テーブルの行が含まれます。
T1 LEFT OUTER JOIN T2の結果は、それらのペアとなった行から構成され、 T1 のペアになっていない各行については、その行と T2 のヌル行の結合となります。 T2 から導き出されたすべての列では、NULL 値が許可されます。 詳細は、「左外部結合」 を参照してください。 - 右外部結合
- 右外部結合の結果には、内部結合で欠落していた右テーブルの行が含まれます。
T1 RIGHT OUTER JOIN T2の結果は、それらのペアとなった行から構成され、 T2 のペアになっていない各行については、その行と T1 のヌル行の結合となります。 T1 から導き出されたすべての列では、NULL 値が許可されます。 詳細は 「右外部結合」 を参照してください。 - 全外部結合
- 完全な外部結合の結果には、内部結合で欠落していた両テーブルの行が含まれます。
T1 FULL OUTER JOIN T2の結果は、対応する行のペアと、 T1 の対応しない各行については、その行と T2 のヌル行の結合、 T2 の対応しない各行については、その行と T1 のヌル行の結合で構成されます。 結果表のすべての列で NULL 値が許可されます。 詳細は、「完全外部結合」 を参照してください。
joined-table は、SELECT ステートメントのいずれかの形式 が使用されている任意のコンテキストで使うことができます。 SELECT ステートメントに joined-table が含まれる場合、ビュー およびカーソルは読み取り専用になります。
LEFT OUTER JOIN、RIGHT OUTER JOIN、または FULL OUTER JOIN を指定する場合は、以下のようになります。
- 行変更タイム・スタンプ列を含む基本表が表指定子で識別されている場合、ROW CHANGE TIMESTAMP 式は外部結合の副選択内でのみ参照できます。
- RID 組み込み関数と ROW CHANGE TOKEN 式を、FROM 文節を含む副選択に指定することはできません。
join-condition 構文
INNER、LEFT OUTER、RIGHT OUTER用
フルアウター用
完全結合式の場合
join-condition説明
INNER、LEFT OUTER、および RIGHT OUTER 結合の場合、join-condition は 以下の規則に準拠している search-condition でなければなりません。
- 1 つの例外を除き、副照会を含むことはできません。 関連する FROM 文節 に join-condition を指定した結合表 が INNER 結合のみで構成されている 場合、その join-condition は副照会を含むことができます。
- join-condition の式で参照する列は、関連する 結合演算子 (同じ joined-table 文節の有効範囲内) のいずれかのオペランド表の列でなければなりません。
FULL OUTER (または FULL) 結合の場合、join-condition は、述部 を AND によってのみ結合できるような検索条件です。 さらに、各述部の形式は「expression = expression」でなければなりません。 ここで、1 つの式は、関連する結合演算子のいずれかのオペランド表の列だけを 参照し、他の式は、他のオペランド表の列だけを参照します。 各式の値は比較可能でなければなりません。 FULL OUTER JOINでは、数値データ型と文字列データ型の暗黙の型変換はサポートされていません。
FULL OUTER 結合内の各 full-join-expression には、列名または列を 参照する cast 関数が含まれていなければいけません。 COALESCE 関数は使用できます。
どのタイプの結合でも、 結合条件の式内の列参照は、列が属する必要があるテーブルに関する規則が適用される前に、列名修飾子と列名の解決で指定された列名修飾子の解決規則を使用して解決されます。
結合操作
T1 の行が T2 の行に結合する場合、 結果の行は、T1 の行の値が T2 の行の値と連結された値で構成されます。 実行すると、「NULL 行」が生成されることがあります。 表の NULL 行 は、列に NULL 値が許可されているかどうかにかかわらず、表の各列の NULL 値で構成されています。
以下のリストは、さまざまな内部結合および外部結合操作の結果をまとめたものです
T1 INNER JOIN T2の結果は、それらのペアとなった行から構成されます。 結合演算子を指定しないと、INNER がデフォルトになります。 LEFT OUTER JOIN または RIGHT OUTER JOIN を実行する順序によっては、 結果が違ってくることがあります。T1 LEFT OUTER JOIN T2の結果は、それらのペアとなった行から構成され、 T1 のペアになっていない各行については、その行と T2 のヌル行の結合となります。 T2 から導き出されたすべての列では、NULL 値が許可されます。T1 RIGHT OUTER JOIN T2の結果は、それらのペアとなった行から構成され、 T2 のペアになっていない各行については、その行と T1 のヌル行の結合となります。 T1 から導き出されたすべての列では、NULL 値が許可されます。T1 FULL OUTER JOIN T2の結果は、対応する行のペアと、 T1 の対応しない各行については、その行と T2 のヌル行の結合、 T2 の対応しない各行については、その行と T1 のヌル行の結合で構成されます。 結果表のすべての列で NULL 値が許可されます。T1 CROSS JOIN T2の結果は、 T1 の各行と T2 の各行を組み合わせたものです。 CROSS JOINは、直交積とも呼ばれます。 結合基準を指定するための WHERE 文節を使用せずに、FROM 文節でコンマによって区切った 2 つの表をリストする方法で、CROSS JOIN 構文を使用せずにクロス結合を指定することもできます。
結合操作は、FROM 文節の一部です。 結合操作を含む SELECT ステートメントからどの行が戻されるかを予測する場合には、結合操作がステートメント内の他の文節の前に 実行されるようにします。
外部結合の例
以下の例では、部品表(PARTS)と製品表(PRODUCTS)という2つのテーブルを使用しています。これらは、ハードウェアの供給品で構成されています。
下図では、PARTS 表の各行に単一の部品に対するデータ (部品名、部品番号、および部品供給業者) が含まれていることを示してあります。
下図では、PRODUCTS 表の各行に単一の製品に対するデータ (製品番号、製品名、および価格) が含まれていることを示してあります。
下表には、外部結合機能を使用して PARTS 表と PRODUCTS 表の結合方法を記載してあります。 この図は、各表の一部の列に基づいて記載されています。
内部結合は、PARTS 表と PRODUCTS 表から形成される各行で構成されています。この形成は、PARTS 表の PROD# 列と PRODUCTS 表の PROD# 列の間で列値が同じであることに基づいて行われます。 内部結合には、PROD# 列が同じでない場合、一致しない列から形成される行は含まれません。
結合は、照会の FROM 文節で指定できます。 検索条件を満たす行からのデータがすべての表から結合されて、結果表を形成します。
最外部の SELECT リストが基本列を参照している場合、 結合の結果列には名前が付きます。 ただし、関数 (COALESCE など) を使用して結果の列を作成すると、その列には名前が付きません。ただし、SELECT リストで AS 文節を使用した場合はその限りではありません。
