5

UNION vs UNION ALL

Серия SQL: знакомство

Почему одно объединение "умное", но медленное, другое - "тупое", но честное?

Обсудим сегодня эту тему.

UNION vs UNION ALL

А пока подписывайся на мой канал На связи: SQL Там я публикую посты про особенности и нюансы SQL. Этот канал про то, как не бояться баз данных, понимать, что такое JOIN, GROUP BY и почему NULL ≠ 0. Его я веду с нуля подписчиков. Присоединяйся!

UNION и UNION ALL.

На вид - почти одно и то же.
По смыслу - разные вещи.

И вот почему

UNION ALL — «тащит всё как есть»

UNION ALL просто берёт результаты двух запросов и клеит их друг под другом:

SELECT name FROM customers

UNION ALL

SELECT name FROM partners;

Никаких проверок, дубликатов, умностей.

- Если в обоих списках есть «Иван», то итоговый результат будет два «Ивана».
- Если порядок в исходных таблицах хаотичный, в результате он будет ещё хаотичнее.

UNION ALL = быстро + честно + без фильтров.

UNION - «умный, но медленный»

UNION делает то же самое, но перед тем как вернуть результат, он удаляет дубликаты:

SELECT name FROM customers

UNION

SELECT name FROM partners;

Чтобы убрать дубли, PostgreSQL/Oracle/MySQL вынуждены:

  • отсортировать результат

  • или построить hash-сет

  • и только потом вернуть данные

Это дорого.
На миллионах строк может стать тормозом №1 в отчёте.

UNION = красиво, чисто, но медленно.

Где использовать UNION?

✔ Когда действительно нужны уникальные значения

Например, получить список всех пользователей, независимо от источника:

SELECT user_id FROM old_system

UNION

SELECT user_id FROM new_system;

✔ Когда нужно исключить дубли после сложной логики

Например, когда запросы пересекаются, а ты не хочешь вручную писать DISTINCT.

Где использовать UNION ALL?

Практически везде, там где не надо удалять дубликаты, т.к. их по определению нет.
Например объединение отчетных данных за разные периоды.

SELECT * FROM sales_2024

UNION ALL

SELECT * FROM sales_2025;

Неочевидный факт: порядок строк не гарантируется

Ни в UNION, ни в UNION ALL.

Если хочешь порядок — дописывай: ORDER BY

Вывод:

  • UNION ALL — как корзина: «скидываем всё подряд».

  • UNION — как фильтр: «скидываем всё, но потом отбираем уникальное».

Мой канал На связи: SQL ждет тебя, если ты тоже хочешь познакомиться с базовым языком для аналитики данных. Подписывайся!

Больше постов читайте по тегу «Аналитика». А если хотите изучить новую профессию, посмотрите актуальные курсы от проверенных школ с реальными отзывами на сайте Пикабу Курсы.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества