Wat is een vakbond?
Vakbonden combineren de resultaten van meerdere SELECT-queries tot een geconsolideerde resultatenset.
De enige vereiste om dit te laten werken, is dat het aantal kolommen hetzelfde moet zijn voor alle SELECT-query's die moeten worden gecombineerd.
Stel dat we als volgt twee tabellen hebben
Laten we nu een UNION-query maken om beide tabellen te combineren met DISTINCT
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Hier worden dubbele rijen verwijderd en worden alleen unieke rijen geretourneerd.
Opmerking: MySQL gebruikt de DISTINCT-clausule als standaard bij het uitvoeren van UNION-query's als er niets is opgegeven.
Laten we nu een UNION-query maken om beide tabellen te combineren met ALL
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Hier zijn dubbele rijen opgenomen en aangezien we ALL gebruiken.
Waarom vakbonden gebruiken
Stel dat er een fout zit in het ontwerp van uw database en u gebruikt twee verschillende tabellen die voor hetzelfde doel zijn bedoeld. U wilt deze twee tabellen samenvoegen tot één terwijl u geen dubbele records in de nieuwe tabel wilt laten kruipen. In dergelijke gevallen kunt u UNION gebruiken.
Overzicht
- De UNION-opdracht wordt gebruikt om meer dan één SELECT-queryresultaten te combineren in een enkele query die rijen bevat van alle geselecteerde query's.
- Het aantal kolommen en gegevenstypen in de SELECT-instructies moet hetzelfde zijn om de UNION-opdracht te laten werken.
- De DISTINCT-clausule wordt gebruikt om dubbele waarden uit de UNION-queryresultatenset te verwijderen. MySQL gebruikt de DISTINCT-clausule als standaard bij het uitvoeren van UNION-query's als er niets is opgegeven.
- De ALL-clausule wordt gebruikt om alle, zelfs de dubbele rijen in de UNION-query te retourneren.
Praktische voorbeelden met MySQL-workbench
In onze myFlixDB laten we combineren
lidmaatschapsnummer en volledige namen uit de tabel Leden
met
movie_id en titel uit de filmtabel
We kunnen de volgende vraag gebruiken
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Het uitvoeren van het bovenstaande script in MySQL-workbench tegen de myflixdb geeft ons de volgende resultaten die hieronder worden weergegeven.
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 |