Условие
Что из перечисленного верно про UNION?
- Сохраняет порядок строк результата.
- Удаляет дубликаты строк.
- Требует совпадения имён столбцов.
- Возвращает все строки, включая дубликаты.
Выбери один из четырёх вариантов ответа.
Решение
Правильный ответ — Удаляет дубликаты строк.
Свойства UNION
| Свойство | UNION | UNION ALL |
|---|---|---|
| Удаляет дубликаты | Да | Нет |
| Сохраняет порядок | Нет (нужен ORDER BY) |
Нет |
| Требует совпадения имён столбцов | Нет (важны типы и количество) | Нет |
| Производительность | Медленнее (нужна сортировка для дедупликации) | Быстрее |
Разбор вариантов
- «Сохраняет порядок строк результата» — неверно. Без
ORDER BYпорядок строк послеUNIONне определён. СУБД может выдать строки в любом порядке (часто — в порядке выполнения сортировки для дедупа). - «Удаляет дубликаты строк» — верно.
UNIONнеявно делаетDISTINCTпо всем колонкам. - «Требует совпадения имён столбцов» — неверно. Имена берутся из первого
SELECT-а; во втором имена игнорируются. Важно совпадение количества столбцов и совместимости типов. - «Возвращает все строки, включая дубликаты» — неверно для
UNION. Это поведениеUNION ALL.
Пример
SELECT 1 AS x UNION SELECT 1; -- 1 строка: {1}
SELECT 1 AS x UNION ALL SELECT 1; -- 2 строки: {1, 1}
-- Имена столбцов берутся из первого SELECT
SELECT 1 AS first_col UNION SELECT 2 AS second_col;
-- Результат: колонка называется first_colПодводные камни
UNIONдорожеUNION ALL. Если знаете, что дубликатов нет (или они неважны), используйтеUNION ALL— экономия на сортировке.ORDER BYпослеUNIONдействует на весь результат. Внутри одного изSELECT-ов он бессмыслен (в большинстве СУБД синтаксически запрещён).- Совместимость типов, а не строгое равенство.
INTEGER+BIGINT— окей.INTEGER+TEXT— почти всегда ошибка (в PostgreSQL — ошибка типа).
Эталонный ответ
Удаляет дубликаты строк — UNION неявно применяет дедупликацию по всем столбцам результата.