EXCEPT в PostgreSQL: разность результатов запросов

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 исключает строки второго запроса из первого.