Gymterview
middle

Для чего используются операторы INTERSECT и EXCEPT в Transact-SQL?

INTERSECT и EXCEPT — операторы множественной алгебры, работающие с результатами двух SELECT-запросов. Оба оператора возвращают только уникальные записи (аналогично UNION).

Оператор Результат Аналогия (множества)
INTERSECT Записи, присутствующие в обоих запросах Пересечение (A ∩ B)
EXCEPT Записи из левого запроса, отсутствующие в правом Разность (A \ B)
Пример
-- Клиенты, которые являются одновременно и поставщиками
SELECT name FROM customers
INTERSECT
SELECT name FROM suppliers;

-- Клиенты, которые не являются поставщиками
SELECT name FROM customers
EXCEPT
SELECT name FROM suppliers;

EXCEPT не является симметричным оператором — порядок запросов имеет значение. A EXCEPT B и B EXCEPT A дают разные результаты. Оба оператора поддерживаются не только в T-SQL, но и в PostgreSQL, Oracle, MySQL 8+ (в Oracle вместо EXCEPT используется MINUS).

На собеседовании: объясните через аналогию с множествами: INTERSECT — пересечение, EXCEPT — разность. Частая ошибка — забыть, что EXCEPT не симметричен, или не знать аналог MINUS в Oracle.