INTERSECT 演算子と EXCEPT 演算子を使用する

完了

INTERSECT と EXCEPT では、2 つの結果セットを相互に比較して、共通する行、または一方に現れて他方に現れない行が返されます。

INTERSECT と EXCEPT は、ベン図を使用して最もよく説明されます。 次の図の円は、製品テーブルの 2 つの結果セットを表しています。1 つは 500 - 750 の ProductID を返すもので、もう 1 つは 751 - 1000 の ProductID を返すものです。 どの色が両方の結果セットに含まれているか、どの色が片方にあって、もう片方にないのかを知りたいとします。 INTERSECT と EXCEPT を使って調べてみましょう。

INTERSECT 両方のセットに存在する行を返します。

An image of a Venn diagram showing INTERSECT results.

EXCEPT: 左の入力クエリからの行のうち、右の入力クエリから出力されないものを、重複を除去した上で返します。

An image of a Venn diagram showing EXCEPT results.

次のコード例では、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;