Was ist eine Gewerkschaft?
Gewerkschaften kombinieren die Ergebnisse mehrerer SELECT-Abfragen zu einer konsolidierten Ergebnismenge.
Die einzige Voraussetzung dafür ist, dass die Anzahl der Spalten für alle SELECT-Abfragen, die kombiniert werden müssen, gleich ist.
Angenommen, wir haben zwei Tabellen wie folgt
Erstellen wir nun eine UNION-Abfrage, um beide Tabellen mit DISTINCT zu kombinieren
SELECT column1, column2 FROM `table1`UNION DISTINCTSELECT column1,column2 FROM `table2`;
Hier werden doppelte Zeilen entfernt und nur eindeutige Zeilen zurückgegeben.
Hinweis: MySQL verwendet standardmäßig die DISTINCT-Klausel, wenn UNION-Abfragen ausgeführt werden, wenn nichts angegeben ist.
Erstellen wir nun eine UNION-Abfrage, um beide Tabellen mit ALL zu kombinieren
SELECT `column1`,` column1` FROM `table1`UNION ALLSELECT ` column1`,` column1` FROM `table2`;
Hier sind doppelte Zeilen enthalten und da wir ALL verwenden.
Warum Gewerkschaften benutzen?
Angenommen, Ihr Datenbankdesign weist einen Fehler auf und Sie verwenden zwei verschiedene Tabellen, die für denselben Zweck bestimmt sind. Sie möchten diese beiden Tabellen in einer zusammenfassen, ohne doppelte Datensätze in die neue Tabelle einzuschleichen. In solchen Fällen können Sie UNION verwenden.
Zusammenfassung
- Der UNION-Befehl wird verwendet, um mehr als ein SELECT-Abfrageergebnis zu einer einzigen Abfrage zu kombinieren, die Zeilen aus allen ausgewählten Abfragen enthält.
- Die Anzahl der Spalten und Datentypen in den SELECT-Anweisungen muss gleich 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 geraden Zeilen in der UNION-Abfrage zurückzugeben.
Praktische Beispiele mit der MySQL Workbench
In unserer myFlixDB können wir kombinieren
Membership_Number und Full_Names aus der Members-Tabelle
mit
movie_id und Titel aus der Filmtabelle
Wir können die folgende Abfrage verwenden
SELECT `membership_number`,`full_names` FROM `members`UNIONSELECT `movie_id`,`title` FROM `movies`;
Wenn Sie das obige Skript in der MySQL-Workbench für die myflixdb ausführen, erhalten Sie die folgenden 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 |