Объединение таблиц – UNION

Операция UNION позволяет объединить несколько результатов выборки в один набор строк. Именно объединение строк отличает эту операцию от соединения таблиц через JOIN, которая присоединяет столбцы.

Два набора записей объединяются с применением операции union

Рассмотрим пример.
Сначала придумаем две таблицы: с участниками забега; с работниками забега.

Таблица «Участники»

Имя_участникаМесто
Светлана2
Алексей4
Александр1
Екатерина5
Илья3

Таблица «Работники»

Имя_работникаФункция
ПетрМенеджер
ИванПромоутер
ЕкатеринаВрач
КириллЧеловек с водичкой

Теперь получим из таблиц уникальные имена всех людей.

--Сформируем первый набор из таблицы участников
select Имя_участника as Имя
from Участники
union
--Сформируем второй набор из таблицы работников
select Имя_работника
from Работники

Результат запроса:

Имя
Александр
Алексей
Екатерина
Иван
Илья
Кирилл
Петр
Светлана

Важно знать про UNION

Самый первый SELECT задает названия столбцам итоговой выборки.

Обратите внимание на то, что в вышеприведенном примере для уникальности имен не потребовалось использовать ключевое слово DISTINCT, т.к. операция UNION уникализирует строки после их объединения.
Если нужно получить все записи, в том числе одинаковые, то нужно использовать операцию UNION ALL вместо просто UNION.

Можно объединять более 2 наборов строк – просто продолжать писать "UNION SELECT …".

Количество столбцов должны совпадать во всех объединяемых наборах.
Типы данных для объединяемых столбцов должны совпадать или хотя бы иметь возможность неявно преобразовываться друг к другу. Например:

  • для набора №1 первый столбец имеет строковый тип VARCHAR, второй столбец числовой тип FLOAT;
  • для набора №2 первый столбец – VARCHAR, второй столбец – числовой тип INT.

Несмотря на то, что второй столбец для разных наборов отличается по типу данных, запрос все равно выполнится, т.к. INT будет преобразован к FLOAT.

Если требуется сделать сортировку полученной выборки, то предложение ORDER BY записывается в самом последнем селекте.

select col1, col2, col3
from Table1

union all

select col1, col2, col3
from Table2

union all

select col1, col2, col3
from Table3
order by col1 -- Сортируем весь результат

Если материалы office-menu.ru Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.

Добавить комментарий