🧙MagicSQL💻
160 subscribers
185 photos
7 files
10 links
Войди в мир SQL и аналитики с моим каналом. Изучай, применяй и преуспевай. Интересный контент, задачи, тесты, разборы и обучение.
#SQL #базыданных #postgresql
Download Telegram
INTERSECT и EXCEPT — два оператора, которые иногда могут решить задачу проще, чем JOIN

Оба оператора сравнивают результаты двух SELECT и работают с наборами строк, часто еще говорят с множествами.

INTERSECT оставляет только то, что есть в обоих результатах.

Например, есть пользователи двух сервисов:

SELECT user_id FROM service_a
INTERSECT
SELECT user_id FROM service_b;


В результате останутся только user_id, которые встретились и в service_a, и в service_b.

EXCEPT работает наоборот: оставляет строки из первого SELECT, которых нет во втором.

SELECT user_id FROM service_a
EXCEPT
SELECT user_id FROM service_b;


Так мы получим пользователей service_a, которых нет в service_b.

Главное отличие:

→ INTERSECT = пересечение двух наборов

→ EXCEPT = первый набор минус второй

Для EXCEPT порядок запросов имеет значение:

A EXCEPT B — это не то же самое, что B EXCEPT A.

По умолчанию оба оператора удаляют дубликаты. Если повторяющиеся строки нужно учитывать, в PostgreSQL есть INTERSECT ALL и EXCEPT ALL.

Практический вывод: если задача звучит как «найти строки, которые есть в обоих результатах» — смотрим в сторону INTERSECT.

Если как «найти строки из первого результата, которых нет во втором» — EXCEPT.
🔥1