MySQL UNION – Komplett handledning
Vad är en union?
Fackföreningar kombinerar resultaten från flera SELECT-frågor till 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 DISTINCT SELECT column1,column2 FROM `table2`;
Här tas duplicerade rader bort och endast unika rader returneras.
Obs: MySQL använder DISTINCT-satsen som standard vid exekvering 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 ALL SELECT ` column1`,` column1` FROM `table2`;
Här ingår dubbletter av rader och eftersom vi använder ALLA.
Varför använda fackföreningar?
Anta att det finns ett fel i din databasdesign och att du använder två olika tabeller avsedda för samma ändamål. Du vill konsolidera dessa två tabeller till en samtidigt som du utelämnar dubbletter från att krypa 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 enda sökning som innehåller rader från alla SELECT-frågor.
- Antalet kolumner och datatyper i SELECT-satser måste vara detsamma för att UNION-kommandot ska fungera.
- DISTINCT-satsen används för att eliminera dubbletter av värden från UNION-frågeresultatuppsättningen. MySQL använder DISTINCT-satsen som standard vid exekvering av UNION-frågor om inget anges.
- ALL-satsen används för att returnera alla även dubblettraderna i UNION-frågan.
Praktiska exempel med hjälp av MySQL arbetsbänk
I vår myFlixDB låter vi kombinera
medlemsnummer och fullständiga namn från tabellen Medlemmar
med
movie_id och titel från filmtabellen
Vi kan använda följande fråga
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Exekvera skriptet ovan i MySQL arbetsbänk 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 |