Що таке союз?
Профспілки поєднують результати з декількох запитів SELECT у зведений набір результатів.
Єдиними вимогами для цього є те, що кількість стовпців має бути однаковою з усіх запитів SELECT, які потрібно об’єднати.
Припустимо, у нас є дві таблиці наступним чином
Давайте тепер створимо запит UNION, що поєднує обидві таблиці за допомогою DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Тут видаляються повторювані рядки, а повертаються лише унікальні рядки.
Примітка: MySQL використовує речення DISTINCT за замовчуванням при виконанні запитів UNION, якщо нічого не вказано.
Давайте тепер створимо запит UNION, що поєднує обидві таблиці за допомогою ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Тут включені повторювані рядки і оскільки ми використовуємо ALL.
Навіщо використовувати профспілки
Припустимо, у вашому дизайні бази даних є недолік, і ви використовуєте дві різні таблиці, призначені для тієї ж мети. Ви хочете об’єднати ці дві таблиці в одну, опустивши повторювані записи, щоб вони не потрапляли до нової таблиці. У таких випадках ви можете використовувати UNION.
Резюме
- Команда UNION використовується для об'єднання кількох результатів запиту SELECT в один запит, що містить рядки з усіх вибраних запитів.
- Кількість стовпців і типів даних у операторах SELECT має бути однаковою, щоб команда UNION працювала.
- Речення DISTINCT використовується для усунення повторюваних значень із набору результатів запиту UNION. MySQL використовує речення DISTINCT за замовчуванням при виконанні запитів UNION, якщо нічого не вказано.
- Речення ALL використовується для повернення всіх навіть повторюваних рядків у запиті UNION.
Практичні приклади використання робочого середовища MySQL
У нашому myFlixDB дозволяє поєднувати
member_number та full_names з таблиці Members
з
ідентифікатор фільму та заголовок із таблиці фільмів
Ми можемо використати наступний запит
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Виконання вищезазначеного сценарію в робочому середовищі MySQL проти 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 |