UNION、INTERSECT、EXCEPT を使った表の結合
標準のセット演算である UNION、INTERSECT、EXCEPT/MINUS を使用すると、2 つ以上の SELECT 文の結果を組み合わせて、より複雑な照会を作成できます。
Netezza Performance Serverは 3 種類のセット操作をサポートしています:
- UNION [DISTINCT] および UNION ALL
- INTERSECT [DISTINCT] および INTERSECT ALL
- EXCEPT [DISTINCT] または MINUS [DISTINCT] および EXCEPT ALL または MINUS ALL
セット演算子を含んだ SQL 文を複合照会 といい、複合照会内のそれぞれの SELECT 文をコンポーネント照会 といいます。 2 つ以上の SELECT 文が、以下の和両立 条件を満たしていれば、これらの文を組み合わせて 1 つの複合照会を作成することができます。
- 両方の照会の結果セットの列数が同じである。
- 2 つの照会内の対応する列のデータ型が同じ、もしくは同じデータ型への変換が可能である。
例えば、1 つ目のコンポーネント照会の列を CHAR 型にして、それに対応する 2 つ目のコンポーネント照会の列を VARCHAR 型にすること、あるいはその逆が可能です。 しかし、1 つ目のコンポーネントの列を DATE 型にして、それに対応する 2 つ目のコンポーネントの列を CHAR 型にすることはできません。 データ型変換の詳細については、データ型推進を参照のこと。
セット演算の構文は以下のとおりです。
<SELECT-statement>
{UNION | INTERSECT | EXCEPT | MINUS} [ALL | DISTINCT]
<SELECT-statement>
{UNION | INTERSECT | EXCEPT | MINUS} [ALL | DISTINCT]
<SELECT-statement>]*
[ORDER BY …]
[LIMIT …]
セット演算の条件には以下のようなものがあります。
- 対応する列同士の名前が一致する場合、SQL 結果でその列名が使われます。 対応する列同士の名前が異なる場合は、最初の照会の列名が set 文で使われます。 SQL 結果の列名を変更するには、最初の照会で AS 節を使用します。
- set 文の最後の照会でのみオプションの ORDER BY 節を指定することが可能です。 SQL では、最終的な結合結果に対して ORDER BY ソートが適用されます。
- ORDER BY の後にオプションの LIMIT 節を指定することが可能です。 SQL では、最終的な結合結果に対して LIMIT 制限が適用されます。
- GROUP BY と HAVING は、個々の照会でのみ指定することができます。 結果に影響を与える使い方はできません。