Какво е съюз?
Синдикатите обединяват резултатите от множество 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`;
Тук са включени дублиращи се редове и тъй като използваме ВСИЧКИ.
Защо да използвам синдикати
Да предположим, че има недостатък в дизайна на вашата база данни и използвате две различни таблици, предназначени за една и съща цел. Искате да консолидирате тези две таблици в една, като същевременно пропуснете дублиращи се записи от пълзене в новата таблица. В такива случаи можете да използвате UNION.
Обобщение
- Командата UNION се използва за комбиниране на повече от един резултат от заявка SELECT в една заявка, съдържаща редове от всички заявки за избор.
- Броят на колоните и типовете данни в операторите SELECT трябва да са еднакви, за да работи командата UNION.
- Клаузата DISTINCT се използва за премахване на дублиращи се стойности от набора от резултати на заявката UNION. MySQL използва клаузата DISTINCT по подразбиране при изпълнение на UNION заявки, ако не е посочено нищо.
- Клаузата ALL се използва за връщане на всички дори дублиращите се редове в заявката UNION.
Практически примери с използване на MySQL workbench
В нашия myFlixDB позволява комбиниране
member_number и full_names от таблицата Members
с
movie_id и заглавие от таблицата с филми
Можем да използваме следната заявка
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `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 |