複数の表からデータを結合する方法
複数の表からの情報を参照する場合、SELECT ステートメントを使用できます。 SELECT ステートメントは、複数の表から列値をリトリーブし、単一の行に結合します。 このリトリーブは、指定された条件に基づいて行われます (通常は、一致する列値に基づいて)。
結合条件
一般に、結合のための主要な構成要素は、その結合に関係する各表の行で一致する列値です。 結合の結果により、ある表の行が別の表の行と関連付けられます。 結合操作のタイプによっては、一方の表に列値 (他方の表の列値と一致しない) を含んだいくつかの行が形成される場合があります。
中間結合表 では中間結果表を指定します。この中間結果表は内部結合または外部結合のいずれかの結果です。 テーブルは、INNER、 FULL OUTER、 LEFT OUTER、または RIGHT OUTERのいずれかの結合演算子をそのオペランドに適用することで生成されます。 詳細は、joined-table を参照してください。
内部結合と外部結合
Db2 内部結合、外部結合(左外部結合、右外部結合、完全外部結合を含む)およびクロス結合をサポートします。
- 内部結合
- 内部結合の結果はテーブルのクロスプロダクトですが、結合条件が真である行のみが残ります。
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 の各行が組み合わさったものです。 結合基準を指定するための WHERE 文節を使用せずに、FROM 文節でコンマによって区切った 2 つの表をリストする方法で、CROSS JOIN 構文を使用せずにクロス結合を指定することもできます。
外部結合の例
以下の例では、部品表(PARTS)と製品表(PRODUCTS)という2つのテーブルを使用しています。これらは、ハードウェアの供給品で構成されています。
下図では、PARTS 表の各行に単一の部品に対するデータ (部品名、部品番号、および部品供給業者) が含まれていることを示してあります。
下図では、PRODUCTS 表の各行に単一の製品に対するデータ (製品番号、製品名、および価格) が含まれていることを示してあります。
下表には、外部結合機能を使用して PARTS 表と PRODUCTS 表の結合方法を記載してあります。 この図は、各表の一部の列に基づいて記載されています。
内部結合は、PARTS 表と PRODUCTS 表から形成される各行で構成されています。この形成は、PARTS 表の PROD# 列と PRODUCTS 表の PROD# 列の間で列値が同じであることに基づいて行われます。 内部結合には、PROD# 列が同じでない場合、一致しない列から形成される行は含まれません。
結合は、照会の FROM 文節で指定できます。 検索条件を満たす行からのデータがすべての表から結合されて、結果表を形成します。
最外部の SELECT リストが基本列を参照している場合、 結合の結果列には名前が付きます。 ただし、関数 (COALESCE など) を使用して結果の列を作成すると、その列には名前が付きません。ただし、SELECT リストで AS 文節を使用した場合はその限りではありません。