MySQL UNION – Vollständiges Tutorial
Was ist eine Union?
Unions kombinieren die Ergebnisse mehrerer SELECT-Abfragen zu einem konsolidierten Ergebnissatz.
Die einzige Voraussetzung dafür, dass dies funktioniert, ist, dass die Anzahl der Spalten aller SELECT-Abfragen, die kombiniert werden müssen, gleich ist.
Angenommen, wir haben zwei Tabellen wie folgt
Lassen Sie uns nun eine UNION-Abfrage erstellen, um beide Tabellen mithilfe von DISTINCT zu kombinieren
SELECT column1, column2 FROM `table1` UNION DISTINCT SELECT column1,column2 FROM `table2`;
Hier werden doppelte Zeilen entfernt und nur eindeutige Zeilen zurückgegeben.
Hinweis: MySQL Verwendet die DISTINCT-Klausel als Standard beim Ausführen von UNION-Abfragen, wenn nichts angegeben ist.
Lassen Sie uns nun eine UNION-Abfrage erstellen, um beide Tabellen mit ALL zu kombinieren
SELECT `column1`,` column1` FROM `table1` UNION ALL SELECT ` column1`,` column1` FROM `table2`;
Hier sind doppelte Zeilen enthalten und da wir ALL verwenden.
Warum Gewerkschaften verwenden?
Angenommen, Ihr Datenbankdesign weist einen Fehler auf und Sie verwenden zwei verschiedene Tabellen für denselben Zweck. Sie möchten diese beiden Tabellen zu einer konsolidieren und gleichzeitig verhindern, dass sich doppelte Datensätze in die neue Tabelle einschleichen. In solchen Fällen können Sie UNION verwenden.
Zusammenfassung
- Der UNION-Befehl wird verwendet, um mehr als eine SELECT-Abfrageergebnisse in einer einzigen Abfrage zu kombinieren, die Zeilen aus allen Auswahlabfragen enthält.
- Die Anzahl der Spalten und Datentypen im SELECT-Anweisungen müssen identisch sein, damit der UNION-Befehl funktioniert.
- Die DISTINCT-Klausel wird verwendet, um doppelte Werte aus der UNION-Abfrageergebnismenge zu entfernen. MySQL verwendet die DISTINCT-Klausel als Standard beim Ausführen von UNION-Abfragen, wenn nichts angegeben ist.
- Die ALL-Klausel wird verwendet, um alle doppelten Zeilen in der UNION-Abfrage zurückzugeben.
Praktische Beispiele mit MySQL Werkbank
In unserer myFlixDB können wir kombinieren
Mitgliedschaftsnummer und vollständige_Namen aus der Mitgliedertabelle
mit
movie_id und Titel aus der Filmtabelle
Wir können die folgende Abfrage verwenden
SELECT `membership_number`,`full_names` FROM `members` UNION SELECT `movie_id`,`title` FROM `movies`;
Ausführen des obigen Skripts in MySQL Werkbank gegen myflixdb liefert uns die unten dargestellten Ergebnisse.
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 |