UNION、INTERSECT、および EXCEPT は、2 つのクエリの結果セットを単一の結果セットに結合する集合演算子です。
構文
クエリ
{ UNION [ ALL ] | INTERSECT | EXCEPT }
クエリ演算子
| 演算子 | 動作 |
|---|---|
UNION | 両方の結果セットに含まれるすべての行を返します。重複行は除外されます。 |
UNION ALL | 両方の結果セットに含まれるすべての行を返します。重複行も保持されます。 |
INTERSECT | 両方の結果セットに共通して存在する行のみを返します。 |
EXCEPT | 最初の結果セットに存在し、2 番目の結果セットには存在しない行を返します。 |
計算シーケンス
デフォルトの評価順序
UNION および EXCEPT は左結合性です。括弧が指定されていない場合、評価は左から右へと行われます。
以下の文では、まず t1 と t2 の和集合が計算され、その後その和集合に含まれるが t3 には含まれない行が返されます:
SELECT * FROM t1
UNION
SELECT * FROM t2
EXCEPT
SELECT * FROM t3
ORDER BY c1;INTERSECT の優先順位
INTERSECT は UNION および EXCEPT よりも高い優先順位を持ちます。INTERSECT が他の演算子とともに出現する場合、その位置に関係なく、常に先に評価されます。
以下の文では、まず t2 と t3 の積集合が計算され、その後その結果と t1 の和集合が返されます:
SELECT * FROM t1
UNION
SELECT * FROM t2
INTERSECT
SELECT * FROM t3
ORDER BY c1;括弧による評価順序の明示的制御
評価順序を明示的に制御するには、括弧を使用します。
以下の文では、まず t1 と t2 の和集合が計算され、その後その結果と t3 の積集合が返されます:
(SELECT * FROM t1
UNION
SELECT * FROM t2)
INTERSECT
(SELECT * FROM t3)
ORDER BY c1;