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.