INTERSECT 演算子と EXCEPT 演算子を使用する
INTERSECT と EXCEPT では、2 つの結果セットを相互に比較して、共通する行、または一方に現れて他方に現れない行が返されます。
INTERSECT と EXCEPT は、ベン図を使用して最もよく説明されます。 次の図の円は、製品テーブルの 2 つの結果セットを表しています。1 つは 500 - 750 の ProductID を返すもので、もう 1 つは 751 - 1000 の ProductID を返すものです。 どの色が両方の結果セットに含まれているか、どの色が片方にあって、もう片方にないのかを知りたいとします。 INTERSECT と EXCEPT を使って調べてみましょう。
INTERSECT 両方のセットに存在する行を返します。
EXCEPT: 左の入力クエリからの行のうち、右の入力クエリから出力されないものを、重複を除去した上で返します。
次のコード例では、products テーブルの両方の結果セットに表示される色が得られます。
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 500 and 750
INTERSECT
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 751 and 1000;
この例では、最初の結果セットに含まれているが、2 番目の結果セットに含まれていない色を知りたいとします。 この場合は、EXCEPT 演算子を使用します。
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 500 and 750
EXCEPT
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 751 and 1000;
クエリの順序によっては、結果が変わることに注意してください。 つまり上のクエリの場合、次のものでは異なる結果セットが返されます。
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 751 and 1000
EXCEPT
SELECT color FROM SalesLT.Product
WHERE ProductID BETWEEN 500 and 750;