Короткий ответ
UNION объединяет совместимые результаты и затем устраняет одинаковые строки. UNION ALL просто добавляет строки второго результата к первому и сохраняет повторы.
Как это работает подробнее
Оба запроса должны возвращать одинаковое число столбцов с совместимыми типами в одинаковом порядке. Имена столбцов итогового набора обычно берутся из первого SELECT.
Удаление дублей требует дополнительной сортировки или хеширования. Главное различие, однако, семантическое: две одинаково выглядящие строки могут представлять два реальных события.
Пример кода
query.sql
SELECT order_id, customer_id, amount, 'web' AS source
FROM web_orders
UNION ALL
SELECT order_id, customer_id, amount, 'app' AS source
FROM app_orders;Что использовать на практике
- События и факты. Используйте
UNION ALL, если каждая исходная строка должна участвовать в подсчёте. - Уникальный справочник. Используйте
UNION, только когда действительно требуется множество уникальных строк.
Подводные камни
- Скрытая потеря. Если не выбрать уникальный идентификатор события,
UNIONможет удалить реальную запись. - Несовпадающие столбцы. Разный порядок полей может привести к ошибке типов или неверной интерпретации данных.