MySQL UNION – Komplet vejledning
Hvad er en forening?
Fagforeninger kombinerer resultaterne fra flere SELECT-forespørgsler til 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, som skal kombineres.
Antag, at vi har to tabeller som følger
Lad os nu oprette en UNION-forespørgsel for at kombinere begge tabeller ved hjælp af DISTINCT
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Her fjernes duplikerede rækker, og kun unikke rækker returneres.
Bemærk: MySQL bruger DISTINCT-sætningen som standard, når der udføres UNION-forespørgsler, hvis intet er angivet.
Lad os nu oprette en UNION-forespørgsel for at kombinere begge tabeller ved hjælp af ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Her er duplikerede rækker inkluderet 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 samme formål. Du ønsker at konsolidere disse to tabeller til én, mens du udelader eventuelle duplikerede 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 ét SELECT-forespørgselsresultat i en enkelt forespørgsel, der indeholder rækker fra alle udvalgte forespørgsler.
- Antallet af kolonner og datatyper i VÆLG udsagn skal være den samme, for at UNION-kommandoen virker.
- DISTINCT-udtrykket bruges til at eliminere duplikerede værdier fra UNION-forespørgselsresultatsættet. MySQL bruger DISTINCT-sætningen som standard, når der udføres UNION-forespørgsler, hvis intet er angivet.
- ALL-sætningen bruges til at returnere alle selv de duplikerede rækker i UNION-forespørgslen.
Praktiske eksempler vha MySQL arbejdsbord
I vores myFlixDB lader vi kombinere
medlemsnummer og fulde_navne fra tabellen Medlemmer
med
movie_id og titel fra filmtabellen
Vi kan bruge følgende forespørgsel
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Udførelse af ovenstående script i MySQL arbejdsbord 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 |