MySQL UNION – Vollständiges Tutorial
⚡ Intelligente Zusammenfassung
MySQL UNION kombiniert die Ergebnisse zweier oder mehrerer SELECT-Abfragen zu einem einzigen Ergebnissatz. Diese Erklärung behandelt die Spaltenregeln, die eine gültige UNION-Operation ermöglichen, den Unterschied zwischen UNION DISTINCT und UNION ALL sowie praktische Beispiele, die mit der Datenbank myflixdb durchgeführt wurden.

Was ist eine UNION in MySQL?
UNION ist eine MySQL Dieser Operator kombiniert die Ergebnisse mehrerer SELECT-Abfragen zu einem konsolidierten Ergebnissatz. Die von der zweiten Abfrage zurückgegebenen Zeilen werden unterhalb der von der ersten Abfrage zurückgegebenen Zeilen angeordnet, wodurch eine vertikale Liste anstelle von zwei separaten Listen entsteht.
Die einzige Voraussetzung dafür, dass dies funktioniert, ist, dass die Anzahl der Spalten in allen zu kombinierenden SELECT-Abfragen gleich ist.
Angenommen, wir haben zwei Tabellen wie die folgenden.
Beide Tabellen enthalten zwei Spalten desselben Typs und können daher vereinigt werden. Die folgenden Beispiele kombinieren genau diese beiden Tabellen.
Warum UNION nutzen?
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 einzigen zusammenführen und dabei alle doppelten Datensätze entfernen.ping in die neue Tabelle. In solchen Fällen können Sie UNION verwenden.
Der Bediener ist auch im alltäglichen Berichtswesen nützlich:
- ArchiVideo- und Live-Daten: Eine aktuelle Tabelle und eine Archivtabelle, die die gleichen Spalten enthalten, können gemeinsam ausgewertet werden, ohne dass sie physisch zusammengeführt werden müssen.
- Mehrere Quellen, ein Bericht: Mitglieder und Filme oder Verkäufe aus zwei Regionen können zur schnellen Überprüfung in einer einzigen Ausgabe aufgelistet werden.
- Migrationsprüfungen: Die Zeilen der alten und der neuen Tabelle können gestapelt und verglichen werden, bevor die alte Tabelle gelöscht wird.
Eine Union ist kein Ersatz für einen Join. Eine Union fügt Zeilen untereinander hinzu, während ein Join Spalten nebeneinander hinzufügt. Dieser Unterschied entscheidet darüber, welcher Operator für die jeweilige Aufgabe erforderlich ist.
MySQL UNION Syntax und Regeln
Nachdem der Zweck nun klar ist, betrachten Sie die Form der Anweisung und die Regeln, die die Datenbank durchsetzt.
SELECT column1, column2 FROM `table1` UNION [DISTINCT | ALL] SELECT column1, column2 FROM `table2`;
Drei Regeln bestimmen jede Gewerkschaft:
- Gleiche Spaltenanzahl. . Der SELECT-Anweisung muss die gleiche Anzahl an Spalten zurückgeben, andernfalls MySQL löst Fehler 1222 aus.
- Kompatible Datentypen in der gleichen Reihenfolge. Die erste Spalte der ersten Abfrage wird mit der ersten Spalte der zweiten Abfrage abgeglichen, sodass eine Zahl auf eine Zahl und Text auf Text treffen sollte.
- Die Namen stammen aus der ersten Abfrage. Die Überschrift des Ergebnissatzes wird aus der ersten SELECT-Anweisung übernommen, weshalb auch alle Aliase dorthin gehören.
An ORDER BY oder die LIMIT Die am Ende platzierte Klausel bezieht sich auf das kombinierte Ergebnis und nicht auf einen Teil davon und muss auf die Spaltennamen verweisen, die von der ersten SELECT-Anweisung erzeugt wurden.
UNION DISTINCT vs UNION ALL
Nachdem die Regeln festgelegt sind, bleibt nur noch die Entscheidung, ob doppelte Zeilen erhalten bleiben sollen.
Tabellen mit DISTINCT kombinieren
Erstellen wir nun eine UNION-Abfrage, 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.
Tabellen kombinieren mit ALL
Erstellen wir nun eine UNION-Abfrage, um beide Tabellen mit ALL zu kombinieren.
SELECT `column1`, `column2` FROM `table1` UNION ALL SELECT `column1`, `column2` FROM `table2`;
Hier werden auch doppelte Zeilen mit einbezogen, da wir ALL verwenden.
Anhand der beiden Bilder lässt sich der Unterschied leicht erkennen, und die folgende Tabelle fasst ihn zusammen.
| Vergleichspunkt | UNION UNTERSCHIEDLICH | UNION ALL |
|---|---|---|
| Doppelte Zeilen | Aus dem Ergebnis entfernt | Im Ergebnis beibehalten |
| Standardverhalten | Ja, gilt, wenn nichts angegeben ist. | Nein, das Schlüsselwort ALL muss geschrieben werden |
| Schnelligkeit | Langsamer, ein Deduplizierungsdurchlauf ist erforderlich | Schneller, die Zeilen werden zurückgegeben, sobald sie gelesen werden. |
| am besten geeignet, wenn | Die zusammengeführte Liste muss eindeutige Zeilen enthalten. | Jede Zeile zählt, sonst können keine Duplikate auftreten. |
💡 Tipp: Wenn die beiden Zweige keine doppelten Zeilen erzeugen können, wählen Sie UNION ALL. Die Datenbank überspringt dann die Sortier- und Vergleichsoperationen, die DISTINCT erfordert, was bei großen Tabellen eine spürbare Zeitersparnis bedeutet.
Praktisches Beispiel zur Verwendung MySQL Werkbank
Die bisherigen Beispiele verwendeten Beispieltabelle. Dieselbe Abfrage wird nun gegen die reale MyFlixDB-Datenbank ausgeführt, in der die beiden Tabellen ganz unterschiedliche Datensätze enthalten.
In unserer myFlixDB kombinieren wir die membership_number und full_names Spalten aus der Mitgliedertabelle mit der movie_id und title Spalten aus der Tabelle „Filme“. Beide Abfragen geben zwei Spalten zurück, daher ist die Vereinigung gültig.
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 Die Abfrage von myflixdb liefert die unten dargestellten Ergebnisse. Beachten Sie, dass die Überschriften aus der ersten SELECT-Anweisung stammen, obwohl die unteren Zeilen Filmdatensätze enthalten.
| 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 |




