EXCEPT
в PostgreSQL позволяет получить разность между результатами двух запросов, возвращая только те строки, которые присутствуют в первом запросе, но отсутствуют во втором.
Использование EXCEPT
Пример получения списка имен, которые есть в таблице пользователей, но отсутствуют в таблице клиентов:
SELECT name FROM users
EXCEPT
SELECT name FROM customers;
Этот запрос вернет только те имена, которые есть в таблице users
, но отсутствуют в таблице customers
.
Разность нескольких запросов
Пример получения email-адресов, которые есть в таблице users
, но отсутствуют как в customers
, так и в employees
:
SELECT email FROM users
EXCEPT
SELECT email FROM customers
EXCEPT
SELECT email FROM employees;
Запрос вернет email-адреса, которые присутствуют только в таблице users
и отсутствуют в двух других.
Отличие от UNION
и INTERSECT
UNION
объединяет все строки, удаляя дубликаты.INTERSECT
возвращает только те строки, которые есть во всех результатах.EXCEPT
исключает строки второго запроса из первого.