Ответ
Ключевое отличие: UNION удаляет дублирующиеся строки из конечного результата, а UNION ALL — нет. UNION ALL работает быстрее, так как не требует дополнительной операции сортировки и дедупликации.
Синтаксис:
SELECT column1, column2 FROM table1
UNION -- или UNION ALL
SELECT column1, column2 FROM table2;
Наглядный пример с дубликатами:
Допустим, у нас есть таблица employees:
| id | name | department | |
|---|---|---|---|
| 1 | Alice | Engineering | |
| 2 | Bob | Marketing | |
| 3 | Alice | Engineering |
-- UNION: удалит дубликаты
SELECT name, department FROM employees WHERE id IN (1, 3)
UNION
SELECT name, department FROM employees WHERE id IN (2, 3);
-- Результат (2 строки):
-- | Alice | Engineering |
-- | Bob | Marketing |
-- Строка (Alice, Engineering) встретилась дважды в исходных выборках,
-- но в результат вошла только один раз.
-- UNION ALL: сохранит все строки, включая дубликаты
SELECT name, department FROM employees WHERE id IN (1, 3)
UNION ALL
SELECT name, department FROM employees WHERE id IN (2, 3);
-- Результат (4 строки):
-- | Alice | Engineering |
-- | Alice | Engineering | <- Дубликат
-- | Bob | Marketing |
-- | Alice | Engineering | <- Дубликат
Когда использовать:
- Используйте
UNION ALL, если вам нужна максимальная производительность и дубликаты допустимы или их не может быть по логике запроса. - Используйте
UNION, когда необходимо гарантированно получить уникальный набор строк, а удаление дубликатов является требованием бизнес-логики.