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.

  • 🔗 Hauptzweck: UNION stapelt die von mehreren SELECT-Abfragen zurückgegebenen Zeilen zu einem einzigen Resultset, wobei eine Abfrage unter der anderen steht.
  • 📐 Spaltenregel: Jede SELECT-Anweisung muss die gleiche Anzahl von Spalten in der gleichen Reihenfolge und mit kompatiblen Datentypen zurückgeben.
  • 🧹 UNION DISTINCT: Doppelte Zeilen werden entfernt und nur eindeutige Zeilen werden zurückgegeben; dies ist das Verhalten. MySQL Gilt standardmäßig.
  • 📚 ALLE VEREINIGEN: Es wird jede Zeile zurückgegeben, einschließlich Duplikaten, was schneller ist, da kein Deduplizierungsdurchlauf erforderlich ist.
  • 🏷️ Spaltennamen: Das Resultset übernimmt seine Spaltennamen aus der ersten SELECT-Anweisung, daher gehören Aliase in diese Abfrage.
  • ️ Typische Verwendung: Zusammenführen zweier Tabellen, die Datensätze desselben Typs enthalten, ohne doppelte Zeilen in die zusammengeführte Ausgabe aufzunehmen.

MySQL UNION OperaDo.

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.

MySQL UNIONMySQL UNION

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:

  1. Gleiche Spaltenanzahl. . Der SELECT-Anweisung muss die gleiche Anzahl an Spalten zurückgeben, andernfalls MySQL löst Fehler 1222 aus.
  2. 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.
  3. 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.

Union-Distinct

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.

Union-All

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

Häufig gestellte Fragen

UNION stapelt die Zeilen einer Abfrage unter einer anderen, sodass das Ergebnis höher wird. JOIN Die Funktion ordnet zusammengehörige Zeilen einander zu und platziert deren Spalten nebeneinander, sodass das Ergebnis breiter wird. Verwenden Sie UNION für ähnliche Zeilen und JOIN für verknüpfte Tabellen.

Platziere einen einzelnen SORTIEREN NACH Die LIMIT-Klausel folgt nach der letzten SELECT-Anweisung. Sie sortiert das kombinierte Ergebnis und muss die Spaltennamen der ersten SELECT-Anweisung verwenden. Eine an dieser Stelle eingefügte LIMIT-Klausel verhält sich analog.

Fehler 1222 tritt auf, wenn die SELECT-Zweige unterschiedliche Spaltenanzahlen zurückgeben. Zählen Sie die Spalten in jedem Zweig und fügen Sie dem kürzeren Zweig einen Literalwert oder einen NULL-Platzhalter hinzu, sodass beide Seiten in der gleichen Reihenfolge vorliegen.

Ja. Text-zu-SQL-Assistenten, einschließlich der in SQL integrierten. MySQL WerkbankGenerieren Sie UNION-Anweisungen aus einer einfachen Anfrage. Überprüfen Sie die Spaltenreihenfolge selbst, da ein Modell Spalten ausrichten kann, die lediglich ähnlich aussehen.

Ein Assistent kann UNION ALL vorschlagen, wenn Duplikate ausgeschlossen sind, was häufig zu einer schnelleren Bearbeitung führt. Die Entscheidung hängt jedoch weiterhin von den Daten ab. Stellen Sie daher sicher, dass sich die Zweige tatsächlich nicht überschneiden können, bevor Sie den Schritt der Duplikatbereinigung entfernen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: