Объединение таблиц – UNION
Операция UNION позволяет объединить несколько результатов выборки в один набор строк. Именно объединение строк отличает эту операцию от соединения таблиц через JOIN, которая присоединяет столбцы.
Рассмотрим пример.
Сначала придумаем две таблицы: с участниками забега; с работниками забега.
Таблица «Участники»
Имя_участника | Место |
---|---|
Светлана | 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 Вам помогли, то поддержите, пожалуйста, проект, чтобы я мог развивать его дальше.