結合とは、複数のテーブルから1つの新しい仮想テーブルに列を射影するアクションのことです。Teradata Databaseでは、クエリー ブロックごとに最大128個のテーブルと単一テーブルのビューの結合をサポートしています。
結合とは複数のテーブルから列値を取り出す処置のことと考えることもできます。
関係代数の用語であるproject、restrict、およびproductの定義については、外部結合の関係代数を参照してください。
結合の種類
- 自然
- Θ (シータ)
- 内部
- 外部
複数の結合タイプを組み合わせて、例えば、自然内部結合および外部結合を作成したり、Θ内部結合および外部結合を作成できます。
自然結合およびシータ結合
自然結合とΘ(シータ)結合の2つが基本タイプの結合になります。
自然結合は、プライマリ インデックスや基本キー/外部キー リレーションなどの一致する列名を持つ共通列の集合に対して行なわれる等価結合で、WHERE句の等価条件中で表わされます。たとえば、
... WHERE a.custnum = b.custnum ...
Θ結合はより汎用性の高いタイプの結合であり、等号(=)だけでなく、より大きい(>)、以上(≥)、未満(<)、以下(≤)などの条件を使用できます。たとえば、
... WHERE a.custnum > b.custnum ...
Θ演算子が等号(=)である場合、結合は等価結合とみなされます。場合によっては、自然結合と等価結合が同じことがあります。Teradata SQLはANSI SQL-2011 NATURAL JOIN構文をサポートしていないため、自然結合と等価結合の実際の相違を認識しておらず、それらは同等とみなされます。どちらの結合も等価条件で行なわれますが、テーブルの結合に使用する列名は、等価結合では一致していなくてもかまいません。他方、自然結合では一致している必要があります。
SQLでは、相互結合(直積)および自己結合という他の2つの特殊な結合もサポートされています。
結合操作では、交点と直積は特別なケースであることに注意してください。INTERSECT演算子を参照してください。
内部結合および外部結合
内部結合は、結合されるテーブルの間で特定の共通点がある行だけを射影します。内部結合には、他のテーブルに対がない行は含まれないので、その情報が失われることが時折指摘されます。
外部結合は、内部結合でレポートされない「失われた」情報を回復する方式を備えることになっています。外部結合は、内部結合の拡張で、結合されるテーブルの間で共通点がある行だけでなく、他のリレーション中に対がない行も射影します。
外部結合の作成方法によっては、内部結合に加えて、左のテーブルの一致していない行、右のテーブルの一致していない行、または両方の一致していない行も射影できます。外部結合の相補的な行集合の属性は、結果中にnullで表わされます。
- 外部結合を派生する際には、表向き多少複雑になります。たとえば、自然内部結合は等価内部結合の射影になりますが、自然外部結合は等価外部結合の射影になりません。
- nullを使用して、「不明な値」の標準的な意味および空白集合という、外部行集合の属性を表わす2つの非常に異なるものを表わすとすると、外部結合の結果を解釈するのは非常に難しくなります。
nullおよび外部結合に関する問題について詳しくは、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
- 外部結合を正しくコーディングするのは、多くの場合、難しいです。 外部結合の詳細は、以下を参照してください。
行レベル セキュリティ制約のあるテーブルおよびビューの結合
Teradata Databaseは、テーブルまたはビューに同じ行レベル セキュリティ制約がある場合、行レベル セキュリティ制約のあるテーブルおよびビューの結合をサポートします。そうでない場合、エラーが返されます。
行レベル セキュリティ制約の詳細については、<Teradata Vantage™ NewSQL Engineセキュリティ管理ガイド、B035-1100>と<Teradata Vantage™ SQLデータ定義言語 - 詳細トピック、B035-1184>の「CREATE CONSTRAINT」を参照してください。