UNION, INTERSECT, EXCEPT
Объединяйте совместимые наборы результатов с помощью UNION, находите общие строки с INTERSECT и разницу с EXCEPT
«UNION, INTERSECT, EXCEPT» — бесплатный урок SQL Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.
Обзор операций над множествами
Три оператора множеств объединяют результирующие наборы построчно:
UNION— строки из A ИЛИ B (без дубликатов)INTERSECT— строки из A И BEXCEPT— строки из A, но НЕ из B
UNION
Объединяет два результирующих набора, удаляя дубликаты:
SELECT email FROM users
UNION
SELECT email FROM newsletter_subscribers;Совместимость столбцов
Оба запроса должны возвращать одинаковое количество столбцов совместимых типов:
-- OK:
SELECT email FROM users UNION SELECT email FROM customers;
-- ERROR — different column count:
SELECT email FROM users UNION SELECT email, name FROM customers;INTERSECT
Строки, присутствующие в обоих запросах:
SELECT product_id FROM orders WHERE user_id = 1
INTERSECT
SELECT product_id FROM orders WHERE user_id = 2;
-- Products bought by BOTH users.EXCEPT
Строки из первого запроса, отсутствующие во втором:
SELECT product_id FROM products
EXCEPT
SELECT product_id FROM order_items;
-- Products never ordered.ORDER BY с операторами множеств
ORDER BY применяется ко всему объединённому результату. Поместите его в конце:
SELECT email FROM users
UNION
SELECT email FROM customers
ORDER BY email;Операторы множеств и NULL
В операциях над множествами два значения NULL считаются равными: UNION удаляет один из них, а INTERSECT считает их совпадающими. (Это отличается от NULL = NULL в WHERE.)
Операторы множеств для подзапросов
Заключайте подзапросы в скобки для ясности и чтобы объединять их с LIMIT:
(SELECT id FROM users ORDER BY created_at DESC LIMIT 10)
UNION
(SELECT id FROM users ORDER BY total DESC LIMIT 10);Приоритет операторов
INTERSECT имеет более высокий приоритет, чем UNION/EXCEPT. Используйте скобки:
SELECT id FROM a
UNION
SELECT id FROM b
INTERSECT
SELECT id FROM c;
-- means: a UNION (b INTERSECT c)
-- Use parens to force order:
(SELECT id FROM a UNION SELECT id FROM b) INTERSECT SELECT id FROM c;Производительность
UNION сортирует данные для удаления дубликатов. INTERSECT и EXCEPT выполняют похожую работу. Для больших наборов предпочитайте конструкции с JOIN/EXISTS и используйте операции над множествами только тогда, когда их смысл однозначно подходит.
Стандартный SQL и особенности СУБД
Все три оператора есть в PostgreSQL. MySQL добавил INTERSECT и EXCEPT только в версии 8.0.31; в более старых версиях их имитируют с помощью JOIN/NOT IN.
Итоги
Операторы множеств выражают операции ИЛИ/И/MINUS над строками.
- UNION — объединение и удаление дубликатов
- INTERSECT — общие строки
- EXCEPT — A минус B
Быстрая проверка
Какой оператор множеств возвращает «строки из A, которых НЕТ в B»?
Часто задаваемые вопросы
Урок «UNION, INTERSECT, EXCEPT» бесплатный?
Да — полный текст урока «UNION, INTERSECT, EXCEPT» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.
Чему я научусь в уроке «UNION, INTERSECT, EXCEPT»?
Объединяйте совместимые наборы результатов с помощью UNION, находите общие строки с INTERSECT и разницу с EXCEPT Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать SQL Academy?
Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «UNION, INTERSECT, EXCEPT»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке SQL Academy?
Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- UNION, INTERSECT, EXCEPT
- UNION ALL и UNION (стоимость удаления дубликатов)
- Выражения CASE и сводные запросы
- Шаблоны перекрёстных таблиц (PostgreSQL crosstab())