UNION、EXCEPT、および INTERSECT 集合演算子を使うと、 単一の照会の中に複数の外側レベルの照会を組み合わせることができます。 それらの集合演算子で結合した照会がそれぞれ実行され、 それぞれ別個の結果が組み合わされます。 各演算子は、それぞれ違った結果を生成します。
UNION 演算子を使うと、 他の 2 つの表 (たとえば TABLE1 と TABLE2) を組み合わせ、 その中の行の重複を除去することによって結果表が生成されます。 UNION と共に ALL を使った場合 (UNION ALL)、 行の重複は除去されません。 いずれにしても、生成される表の各行は、TABLE1 か TABLE2 のいずれかから取られた行です。
次の例は、UNION 演算子を使うことによって、 給与が $21, 000 より多い人、 または管理職 (MANAGER) で就業年数 (YEARS) が 8 年未満の人の名前を戻す照会の例です。
(1)
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 UNION
(2)
SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8 ORDER BY ID
個々の照会の結果は、次のとおりです。
(1)
ID NAME ------ --------- 140 Fraye 160 Molinare 260 Jones
(2)
ID NAME ------ --------- 10 Sanders 30 Marenghi 100 Plotz 140 Fraye 160 Molinare 240 Daniels
データベース・マネージャーは、2 つの照会の結果を組み合わせ、 重複を除去してから、最終結果を昇順で戻します。
ID NAME ------ --------- 10 Sanders 30 Marenghi 100 Plotz 140 Fraye 160 Molinare 240 Daniels 260 Jones
ORDER BY 文節をいずれかの集合演算子と共に使う場合、 それは最後の照会より後でなければなりません。 順序は、組み合わせた後の結果セットに適用されます。
2 つの表の中の列名が違っているなら、 組み合わされた結果の表には、対応する列の名前が含まれません。 列は、それが出現する順序で番号が付けられます。 そのため、結果表の順序を指定するのであれば、 その列番号を ORDER BY 文節に指定する必要があります。
EXCEPT 演算子は、TABLE1 には含まれているが TABLE2 には含まれていない行を取り出し、 行の重複をすべて除去することによって結果表を生成します。 EXCEPT と共に ALL を使った場合 (EXCEPT ALL)、 行の重複は除去されません。
次の例は、EXCEPT 演算子を使うことによって、 給与が $21,000 より多いが、 管理職 (MANAGER) ではなく就業年数 (YEARS) が 8 年以上の人の名前を戻す照会の例です。
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 EXCEPT SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
個々の照会の結果は、UNION の説明で示したものと同じです。 このステートメントの結果は、次のとおりです。
ID NAME ------ --------- 260 Jones
INTERSECT 演算子は、 TABLE1 にも TABLE2 にも含まれている行を取り出し、 行の重複をすべて除去することによって結果表を生成します。 INTERSECT と共に ALL を使った場合 (INTERSECT ALL)、重複した行は削除されません。
次の例は、INTERSECT 演算子を使うことによって、 給与が $21,000 より多く、 かつ管理職 (MANAGER) で就業年数 (YEARS) が 8 年未満の従業員の名前と ID を戻す照会の例です。
SELECT ID, NAME FROM STAFF WHERE SALARY > 21000 INTERSECT SELECT ID, NAME FROM STAFF WHERE JOB='Mgr' AND YEARS < 8
個々の照会の結果は、UNION の説明で示したものと同じです。 2 つの照会を INTERSECT で結合した結果は、次のとおりです。
ID NAME ------ --------- 140 Fraye 160 Molinare
UNION、EXCEPT、および INTERSECT 演算子を使う場合、 次のことに注意してください。