Учебники

23) Союзы

 

Что такое союз?

Профсоюзы объединяют результаты нескольких запросов SELECT в консолидированный набор результатов.

Единственное требование для этого состоит в том, что количество столбцов должно быть одинаковым для всех запросов SELECT, которые необходимо объединить.

 

 

Предположим, у нас есть две таблицы следующим образом

MySQL UNION - полное руководство MySQL UNION - полное руководство

 

Давайте теперь создадим запрос UNION для объединения обеих таблиц, используя DISTINCT

SELECT column1, column2 FROM `table1`
UNION DISTINCT
SELECT  column1,column2  FROM `table2`;

 

Здесь дублирующиеся строки удаляются и возвращаются только уникальные строки.

MySQL UNION - полное руководство

Примечание: MySQL использует предложение DISTINCT по умолчанию при выполнении запросов UNION, если ничего не указано.

Давайте теперь создадим запрос UNION для объединения обеих таблиц, используя ALL

SELECT `column1`,` column1` FROM `table1`
UNION ALL
SELECT ` column1`,` column1`  FROM `table2`;

Здесь дубликаты строк включены, и, поскольку мы используем ВСЕ.

MySQL UNION - полное руководство

Зачем использовать союзы

Предположим, в вашей базе данных есть недостаток, и вы используете две разные таблицы, предназначенные для одной и той же цели. Вы хотите объединить эти две таблицы в одну, не пропуская повторяющиеся записи в новую таблицу. Вы можете использовать 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_numberfull_names
1Janet Jones
2Janet Smith Jones
3Robert Phil
4Gloria Williams
5Leonard Hofstadter
6Sheldon Cooper
7Rajesh Koothrappali
8Leslie Winkle
9Howard Wolowitz
1667% Guilty
6Angels and Demons
4Code Name Black
5Daddy's Little Girls
7Davinci Code
2Forgetting Sarah Marshal
9Honey mooners
19movie 3
1Pirates of the Caribean 4
18sample movie
17The Great Dictator
3X-Men