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