Для чего используется оператор UNION в SQL и каковы его правила?

Ответ

Оператор UNION используется для объединения результирующих наборов двух или более SELECT-запросов в один.

Ключевые правила:

  1. Количество и порядок столбцов во всех объединяемых запросах должны совпадать.
  2. Типы данных в соответствующих столбцах должны быть совместимы.
  3. UNION автоматически удаляет дублирующиеся строки из финального результата.
  4. UNION ALL выполняет то же объединение, но сохраняет все дубликаты, работая быстрее, так как не требует проверки на уникальность.

Пример: Объединение списков имён из двух таблиц.

-- Получить уникальные имена всех сотрудников и клиентов
SELECT first_name FROM employees
UNION
SELECT customer_name FROM customers
ORDER BY first_name;

UNION vs JOIN:

  • JOIN соединяет таблицы по горизонтали (добавляет столбцы) на основе условия связи.
  • UNION объединяет результаты по вертикали (добавляет строки), складывая их друг под другом.

Ответ 18+ 🔞

Да, ну вот, смотри, оператор UNION, это как если бы ты взял две кучки бумажек с записями и просто свалил их в одну коробку, одну поверх другой. По-простому.

Главные заморочки, без которых нихуя не получится:

  1. Сколько столбцов ты выбрал в первом запросе — ровно столько же и во втором, и в третьем. И в том же порядке, блядь. Нельзя сначала имя, потом фамилию, а во втором запросе — зарплату, а потом должность. Порядок — святое, ёпта.
  2. Типы данных в столбцах, которые друг на друга ложатся, должны хоть как-то друг друга понимать. Текст к тексту, цифры к цифрам. А то получится ерунда на постном масле.
  3. Обычный UNION — он такой чистюля, блядь. Он смотрит на все строки и говорит: «О, два Ивана? Нахуй один лишний!» — и выкидывает дубликаты.
  4. А вот UNION ALL — это пофигист. Он тупо сгребает всё в кучу и не парится. «Два Ивана? И хуй с ними, пусть оба будут». И работает он, сука, быстрее, потому что не тратит время на эту ебучую проверку.

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

-- Берём имена отсюда...
SELECT first_name FROM employees
UNION -- ...потом добавляем имена отсюда, сверху. И выкидываем повторы.
SELECT customer_name FROM customers
ORDER BY first_name; -- И в конце всё это дело по алфавиту сортируем.

Чем UNION не JOIN:

  • JOIN — это когда ты две таблицы рядом кладёшь и сшиваешь их нитками (условием связи). Получается шире.
  • UNION — это когда ты берёшь результаты и ставишь их друг на дружку, стопкой. Получается выше. Совсем разные операции, ядрёна вошь!