Что такое союз?
Профсоюзы объединяют результаты нескольких запросов SELECT в консолидированный набор результатов.
Единственное требование для этого состоит в том, что количество столбцов должно быть одинаковым для всех запросов SELECT, которые необходимо объединить.
Предположим, у нас есть две таблицы следующим образом
Давайте теперь создадим запрос UNION для объединения обеих таблиц, используя DISTINCT
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Здесь дублирующиеся строки удаляются и возвращаются только уникальные строки.
Примечание: MySQL использует предложение DISTINCT по умолчанию при выполнении запросов UNION, если ничего не указано.
Давайте теперь создадим запрос UNION для объединения обеих таблиц, используя ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Здесь дубликаты строк включены, и, поскольку мы используем ВСЕ.
Зачем использовать союзы
Предположим, в вашей базе данных есть недостаток, и вы используете две разные таблицы, предназначенные для одной и той же цели. Вы хотите объединить эти две таблицы в одну, не пропуская повторяющиеся записи в новую таблицу. Вы можете использовать UNION в таких случаях.
Резюме
- Команда UNION используется для объединения нескольких результатов запроса SELECT в один запрос, содержащий строки из всех запросов выбора.
- Для работы команды UNION количество столбцов и типов данных в инструкциях SELECT должно быть одинаковым.
- Предложение DISTINCT используется для удаления повторяющихся значений из набора результатов запроса UNION. MySQL использует предложение DISTINCT по умолчанию при выполнении запросов UNION, если ничего не указано.
- Предложение ALL используется для возврата всех даже повторяющихся строк в запросе UNION.
Практические примеры использования MySQL Workbench
В нашем myFlixDB можно объединить
members_number и full_names из таблицы участников
с
идентификатор фильма и заголовок из таблицы фильмов
Мы можем использовать следующий запрос
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Выполнение вышеупомянутого сценария в MySQL Workbench против myflixdb дает нам следующие результаты, показанные ниже.
membership_number full_names 1 Janet Jones 2 Janet Smith Jones 3 Robert Phil 4 Gloria Williams 5 Leonard Hofstadter 6 Sheldon Cooper 7 Rajesh Koothrappali 8 Leslie Winkle 9 Howard Wolowitz 16 67% Guilty 6 Angels and Demons 4 Code Name Black 5 Daddy's Little Girls 7 Davinci Code 2 Forgetting Sarah Marshal 9 Honey mooners 19 movie 3 1 Pirates of the Caribean 4 18 sample movie 17 The Great Dictator 3 X-Men