2.4. 問い合わせの結合

2つの問い合わせの結果は、和、積、差の集合演算を使って結合することができます。構文は以下のとおりです。

query1 UNION [ALL] query2
query1 INTERSECT [ALL] query2
query1 EXCEPT [ALL] query2

query1query2 は、これまでに述べたいかなる機能にも使うことができる問い合わせです。集合演算は入れ子にしたり、繋げたりすることができます。たとえば、以下の文を見てみましょう。

query1 UNION query2 UNION query3

上記の文は、本当は以下の文を意味します。

(query1 UNION query2) UNION query3

UNION は、query2 の結果を query1 の結果に付加します(しかし、実際に行が返された順序である保証はありません)。さらに、ALL を指定しないと、DISTINCT と同様に、すべての重複している行を削除します。

INTERSECT は、query1 の結果と query2 の結果の両方に含まれているすべての行を返します。重複している行は、ALLを指定しないと削除されます。

EXCEPT は、query1 の結果には含まれているけれども、query2 の結果には含まれていないすべての行を返します。繰り返しですが、重複は ALL を指定しないと削除されます。

2つの問い合わせの和、積、差を算出するために、そこの2つの問い合わせは "union 互換"でなければいけません。つまり、2つの問い合わせが同じ数の列を返し、対応する列は互換性のあるデータ型( Section 5.6を参照)でなければなりません。