INTERSECT в PostgreSQL: пересечение результатов запросов

INTERSECT в PostgreSQL позволяет получить пересечение результатов двух или более запросов, возвращая только те строки, которые присутствуют во всех наборах данных.

Использование INTERSECT

Пример получения списка имен, которые есть и в таблице пользователей, и в таблице клиентов:

SELECT name FROM users
INTERSECT
SELECT name FROM customers;

Этот запрос вернет только те имена, которые встречаются в обеих таблицах.

Пересечение нескольких запросов

Пример получения email-адресов, которые присутствуют одновременно в трех таблицах:

SELECT email FROM users
INTERSECT
SELECT email FROM customers
INTERSECT
SELECT email FROM employees;

Запрос вернет email-адреса, которые есть во всех трех таблицах.

Отличие от UNION и EXCEPT

  • UNION объединяет все строки, удаляя дубликаты.
  • INTERSECT возвращает только те строки, которые есть во всех результатах.
  • EXCEPT исключает строки второго запроса из первого.