MySQL UNION – Volledige zelfstudie
Wat is een Unie?
Unions combineren de resultaten van meerdere SELECT-query's in 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 de volgende twee tabellen hebben
Laten we nu een UNION-query maken om beide tabellen te combineren met DISTINCT
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Hier worden dubbele rijen verwijderd en worden alleen unieke rijen geretourneerd.
Opmerking: MySQL gebruikt standaard de DISTINCT-clausule 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 behulp van ALL
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Hier zijn dubbele rijen opgenomen en aangezien we ALL.
Waarom vakbonden gebruiken?
Stel dat er een fout zit in uw databaseontwerp en u gebruikt twee verschillende tabellen die voor hetzelfde doel zijn bedoeld. U wilt deze twee tabellen samenvoegen tot één tabel, terwijl u voorkomt dat dubbele records in de nieuwe tabel terechtkomen. In dergelijke gevallen kunt u UNION gebruiken.
Samenvatting
- De opdracht UNION wordt gebruikt om meer dan één SELECT-queryresultaat te combineren in één enkele query die rijen bevat van alle geselecteerde query's.
- Het aantal kolommen en gegevenstypen in de SELECT-instructies moet hetzelfde zijn om het UNION-commando 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 dubbele rijen in de UNION-query te retourneren.
Praktijkvoorbeelden met behulp van MySQL werkbank
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 query gebruiken
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Voer het bovenstaande script uit in MySQL werkbank tegen myflixdb geeft ons de volgende resultaten, zoals hieronder 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 |