Vad är en fackförening?
Fackföreningar kombinerar resultaten från flera SELECT-frågor i en konsoliderad resultatuppsättning.
De enda kraven för att detta ska fungera är att antalet kolumner ska vara detsamma från alla SELECT-frågor som behöver kombineras.
Anta att vi har två tabeller enligt följande
Låt oss nu skapa en UNION-fråga för att kombinera båda tabellerna med DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Här tas dubbla rader bort och endast unika rader returneras.
Obs! MySQL använder DISTINCT-satsen som standard vid körning av UNION-frågor om inget anges.
Låt oss nu skapa en UNION-fråga för att kombinera båda tabellerna med ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Här ingår dubbla rader och eftersom vi använder ALL.
Varför använda fackföreningar
Antag att det finns en brist i din databasdesign och att du använder två olika tabeller avsedda för samma ändamål. Du vill konsolidera dessa två tabeller i en medan du utelämnar dubbletter från att smyga in i den nya tabellen. Du kan använda UNION i sådana fall.
Sammanfattning
- UNION-kommandot används för att kombinera mer än ett SELECT-frågeresultat till en enskild fråga som innehåller rader från alla valda frågor.
- Antalet kolumner och datatyper i SELECT-satserna måste vara detsamma för att UNION-kommandot ska fungera.
- DISTINCT-klausulen används för att eliminera dubbletter av UNION-sökresultatuppsättningen. MySQL använder DISTINCT-satsen som standard vid körning av UNION-frågor om inget anges.
- ALL-klausulen används för att returnera alla även de dubbla raderna i UNION-frågan.
Praktiska exempel med MySQL-arbetsbänk
I vår myFlixDB kan vi kombinera
medlemsnummer och fullständiga namn från medlemstabellen
med
movie_id och titel från filmtabellen
Vi kan använda följande fråga
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Att utföra ovanstående skript i MySQL-arbetsbänken mot myflixdb ger oss följande resultat som visas nedan.
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 |