MySQL UNION – Komplett opplæring
Hva er en union?
Fagforeninger kombinerer resultatene fra flere SELECT-spørringer til et konsolidert resultatsett.
De eneste kravene for at dette skal fungere er at antallet kolonner skal være det samme fra alle SELECT-spørringene som må kombineres.
Anta at vi har to tabeller som følger
La oss nå lage en UNION-spørring for å kombinere begge tabellene ved å bruke DISTINCT
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Her fjernes dupliserte rader og kun unike rader returneres.
OBS: MySQL bruker DISTINCT-leddet som standard når UNION-spørringer utføres hvis ingenting er spesifisert.
La oss nå lage en UNION-spørring for å kombinere begge tabellene ved å bruke ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Her er dupliserte rader inkludert og siden vi bruker ALLE.
Hvorfor bruke fagforeninger?
Anta at det er en feil i databasedesignet ditt og at du bruker to forskjellige tabeller ment for samme formål. Du ønsker å konsolidere disse to tabellene til én mens du utelater eventuelle dupliserte poster fra å krype inn i den nye tabellen. Du kan bruke UNION i slike tilfeller.
Sammendrag
- UNION-kommandoen brukes til å kombinere mer enn ett SELECT-spørringsresultat til en enkelt spørring som inneholder rader fra alle utvalgsspørringene.
- Antall kolonner og datatyper i SELECT-utsagn må være den samme for at UNION-kommandoen skal fungere.
- DISTINCT-leddet brukes til å eliminere dupliserte verdier fra UNION-spørringsresultatsettet. MySQL bruker DISTINCT-leddet som standard når UNION-spørringer utføres hvis ingenting er spesifisert.
- ALL-leddet brukes til å returnere alle til og med dupliserte rader i UNION-spørringen.
Praktiske eksempler ved bruk av MySQL arbeidsbenk
I vår myFlixDB lar vi kombinere
membership_number og full_names fra Members-tabellen
med
movie_id og tittel fra filmtabellen
Vi kan bruke følgende spørring
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Utfører skriptet ovenfor i MySQL arbeidsbenk mot myflixdb gir oss 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 |