Операторы EXCEPT и INTERSECT
Операторы EXCEPT и INTERSECT позволяют осуществить выборку данных, общих или различных для нескольких наборов данных. Синтаксис новых операторов абсолютно аналогичен оператору UNION.
Допустим, необходимо получить BrandID производителей, модели которых не присутствуют в таблице Products. Тогда, применив оператор EXCEPT следующим образом: SELECT B.BrandID FROM Brands B EXCEPT
SELECT P.BrandID FROM Products P
можно достичь того же результата, что и при использовании оператора EXITS в комбинации с оператором отрицания NOT: SELECT B.BrandID FROM Brands B WHERE NOT EXISTS (SELECT P.BrandID FROM Products P WHERE P.BrandID = B.BrandID)
Аналогично, для того, чтобы получить BrandID производителей, чьи модели присутствуют в таблице Products. Можно использовать оператор INTERSECT: SELECT B.BrandID FROM Brands B INTERSECT
SELECT P.BrandID FROM Products P
а можно и оператор EXIST без отрицания: SELECT B.BrandID FROM Brands B WHERE EXISTS (SELECT P.BrandID FROM Products P WHERE P.BrandID = B.BrandID)
либо же совсем привычный синтаксис INNER JOIN: SELECT DISTINCT B.BrandID FROM Brands B INNER JOIN Products P ON B.BrandID = P.BrandID
Очевидно, что новые операторы позволяют уменьшить количество кода, необходимого для реализации выборки, причем выигрыш в объеме кода растет пропорционально числу полей в выборке. Также, не менее важным преимуществом является лучшая читаемость кода.
Производительность запроса при использовании новых операторов, практически не отличается от производительности запросов с EXISTS и JOIN. Число чтений (Reads) и время выполнения (Duration) мало отличаются в обоих случаях.