Что делает оператор UNION в SQL?

Ответ

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

  • Объединяет только совместимые наборы данных: Все SELECT-запросы должны возвращать одинаковое количество столбцов, и соответствующие столбцы должны иметь совместимые типы данных.
  • Удаляет дубликаты строк: По умолчанию UNION возвращает только уникальные строки из объединенного результата (аналогично SELECT DISTINCT).
  • UNION ALL: Если нужно сохранить все строки, включая дубликаты, используется UNION ALL. Он работает быстрее, так как не выполняет проверку на уникальность.

Синтаксис:

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
ORDER BY column1; -- Сортировка применяется к конечному результату

Практический пример: Предположим, есть две таблицы: employees_uk и employees_usa. Нужно получить общий список уникальных email всех сотрудников.

-- Получить уникальные email из двух таблиц
SELECT email FROM employees_uk
UNION
SELECT email FROM employees_usa
ORDER BY email;

-- Получить ВСЕ email, включая повторяющиеся
SELECT email FROM employees_uk
UNION ALL
SELECT email FROM employees_usa;

Важные отличия от JOIN:

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

Применение в тестировании:

  • Проверка корректности данных после миграции или сравнения данных из разных источников.
  • Создание комплексных тестовых наборов данных.

Ответ 18+ 🔞

Давай разберём эту штуку, про которую все так умно говорят, а на деле — обычный склейщик бумажек, только в базе данных. UNION, блядь.

Представь, у тебя есть два списка имён: один от тёщи, другой от начальника. И тебе надо их слить в один, но так, чтобы Петров Иван не повторялся, а то он и там мудак, и тут мудак. Вот UNION это и делает — берёт результаты от нескольких SELECT-запросов и склеивает их в одну кучу, по вертикали, сука.

Но есть нюансы, ёпта:

  • Совместимость — это всё. Нельзя, блядь, склеить столбец с именами и столбец с датами так, чтобы получилось что-то вменяемое. Все SELECT-ы должны возвращать одинаковое число столбцов, и типы данных должны хотя бы не конфликтовать. Иначе получишь ошибку, и будешь сидеть, чесать репу.
  • Дубликаты — нахуй. По умолчанию UNION ведёт себя как зануда-перфекционист и выкидывает все повторяющиеся строки. Работает как SELECT DISTINCT для объединённого результата.
  • UNION ALL — быстрее и проще. А если тебе похуй на дубликаты, или ты их специально хочешь сохранить (например, для подсчёта), то юзай UNION ALL. Он тупо сваливает всё в одну кучу без проверок, поэтому и работает шустрее, как паровоз.

Как это выглядит в коде, не трогаем его, он святой:

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2
ORDER BY column1; -- Сортируем уже финальный результат, блядь

Пример из жизни, чтобы не быть голословным: Допустим, у тебя офисы в Лондоне (employees_uk) и в Штатах (employees_usa). Надо собрать всех уникальных почтарей, чтобы спам рассылать.

-- Собираем УНИКАЛЬНЫЕ почты со всех концов света
SELECT email FROM employees_uk
UNION
SELECT email FROM employees_usa
ORDER BY email; -- И чтоб красиво, по алфавиту, сука

-- А вот если нам надо ВСЕ почты, даже если Васян дублируется (он и там, и тут работает)
SELECT email FROM employees_uk
UNION ALL
SELECT email FROM employees_usa;

И главное, не путай с JOIN, а то будет пиздец.

  • JOIN — это как брак, блядь. Он соединяет две таблицы горизонтально, по какому-то общему признаку (ключу), и получается одна широкая запись. "Ты — моя половинка, вот твои данные и мои, вместе".
  • UNION — это как очередь, сука. Он ставит результаты одного запроса под результаты другого, вертикально. "Отсюда список, оттуда список, всё в одну колонку, и не толкаться".

Где пригодится, кроме как спам рассылать? Ну, например, проверить, не накосячил ли ты при переносе данных с одной базы на другую. Или собрать тестовый датасет из кусочков разных таблиц, чтобы потом на нём всё сломать. В общем, штука полезная, если знать, куда её приложить, а не просто так, для красоты.