Hvad er en union?
Fagforeninger kombinerer resultaterne fra flere SELECT-forespørgsler i et konsolideret resultatsæt.
De eneste krav for at dette skal fungere er, at antallet af kolonner skal være det samme fra alle de SELECT-forespørgsler, der skal kombineres.
Antag, at vi har to tabeller som følger
Lad os nu oprette en UNION-forespørgsel til at kombinere begge tabeller ved hjælp af DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Her fjernes dublerede rækker, og kun unikke rækker returneres.
Bemærk: MySQL bruger DISTINCT-klausulen som standard ved udførelse af UNION-forespørgsler, hvis der ikke er angivet noget.
Lad os nu oprette en UNION-forespørgsel til at kombinere begge tabeller ved hjælp af ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Her inkluderes duplikatrækker, og da vi bruger ALLE.
Hvorfor bruge fagforeninger
Antag, at der er en fejl i dit databasedesign, og du bruger to forskellige tabeller beregnet til det samme formål. Du vil konsolidere disse to tabeller i en, mens du undlader at duplikere poster fra at krybe ind i den nye tabel. Du kan bruge UNION i sådanne tilfælde.
Resumé
- UNION-kommandoen bruges til at kombinere mere end et SELECT-forespørgselsresultat til en enkelt forespørgsel, der indeholder rækker fra alle de valgte forespørgsler.
- Antallet af kolonner og datatyper i SELECT-sætningerne skal være det samme, for at UNION-kommandoen kan fungere.
- DISTINCT-klausulen bruges til at fjerne duplikatværdier fra UNION-forespørgselsresultatsættet. MySQL bruger DISTINCT-klausulen som standard ved udførelse af UNION-forespørgsler, hvis der ikke er angivet noget.
- AL-klausulen bruges til at returnere alle lige de dobbelte rækker i UNION-forespørgslen.
Praktiske eksempler ved brug af MySQL-arbejdsbænk
I vores myFlixDB kan vi kombinere
medlemsnummer og fulde navne fra medlemstabellen
med
movie_id og titel fra filmtabellen
Vi kan bruge følgende forespørgsel
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Udførelse af ovenstående script i MySQL workbench mod myflixdb giver os følgende resultater vist nedenfor.
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 |