Zurück zur Artikelliste Artikel
5 Leseminuten

UNION vs. UNION ALL in SQL: Was ist der Unterschied?

Der Unterschied?

UNION und UNION ALL werden beide verwendet, um Datensätze aus mehreren Tabellen abzurufen. In diesem Artikel werden die Unterschiede zwischen den beiden erläutert, so dass Sie die beste Wahl für jedes einzelne Szenario treffen können.

Sie können die SQL-Befehle UNION und UNION ALL verwenden, um Daten aus mehreren Tabellen in Ihrer Datenbank abzurufen. Dies ist ein häufiger Anwendungsfall, da die meisten Datenbanken viele Tabellen haben. Sowohl UNION als auch UNION ALL sind als Set-Operatoren bekannt. In SQL fassen Mengenoperatoren die Ergebnisse von zwei oder mehr Abfragen zu einem einzigen Ergebnis zusammen. Mehr über Mengenoperatoren erfahren Sie in diesem Artikel.

Wenn Sie UNION mit UNION ALL vergleichen, gibt es einen wesentlichen Unterschied:

  • UNION liefert nur eindeutigeErgebnisse
  • UNION ALL gibt alle Datensätze zurück, einschließlich der Duplikate.

Wenn Sie das Gefühl haben, dass Sie von einem gut strukturierten, umfassenden Kurs profitieren würden, der die Grundlagen von SQL abdeckt, sollten Sie diesen SQL für Anfänger Kurs von LearnSQL in Betracht ziehen.

UNION vs. UNION ALL: Syntax

Die Syntax der beiden UNION Varianten ist sehr ähnlich. Betrachten wir sie einzeln, beginnend mit UNION.

UNION-Syntax

Erinnern Sie sich: UNION kombiniert die Ergebnismenge von zwei oder mehr SELECT Anweisungen, wobei nur unterschiedliche Werte angezeigt werden.

Die folgende SQL-Syntax zeigt eine UNION zwischen zwei verschiedenen Tabellen; die Spalten in beiden SELECT -Anweisungen haben denselben oder einen übereinstimmenden Datentyp.

Die gezeigte WHERE Klausel ist eine optionale Einbeziehung:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

SQL UNION ALL Syntax

Denken Sie daran, dass UNION ALL die Ergebnisse von zwei oder mehr SELECT Anweisungen kombiniert und alle Werte anzeigt, einschließlich Duplikate, falls sie existieren.

Die nachstehende SQL-Syntax zeigt eine UNION ALL, die zwischen zwei verschiedenen Tabellen stattfindet. Auch hier sind die Spalten in SELECT vom gleichen oder übereinstimmenden Datentyp und die WHERE Klausel ist optional:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION ALL

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

SQL UNION und UNION ALL Erklärt

Für UNION und UNION ALL gibt es mehrere Verwendungsregeln. Die Nichteinhaltung dieser Regeln führt zu Fehlermeldungen:

  • Die Anzahl der Spalten, die in der ersten und zweiten Abfrage verwendet werden, muss gleich sein und die Datentypen (z.B. INT, VARCHAR, etc.) müssen übereinstimmen.
  • Die Spaltennamen, die in beiden Abfragen enthalten sind, können unterschiedlich sein; wenn dies der Fall ist, zeigt der resultierende Datensatz die Spaltennamen der ersten Abfrage.
  • Wenn Sie SQL-Aliase in Verbindung mit UNION und UNION ALL verwenden, müssen Sie den Alias nur in die erste Abfrage aufnehmen. Wenn Sie ihn in die zweite Abfrage aufnehmen, führt dies nicht zu einem Fehler, hat aber auch keine Auswirkungen auf die Ausgabe.

Sie können UNION und UNION ALL verwenden, um Tabellen zu kombinieren, die keine gemeinsamen Spalten haben. Dieser Anwendungsfall wird in diesem Artikel über die Verknüpfung von Tabellen ohne gemeinsame Spalte behandelt.

SQL UNION vs. UNION ALL: Beispiel

Schauen wir uns ein praktisches Beispiel an, um ein besseres Verständnis von UNION vs. UNION ALL zu erlangen. Stellen wir uns vor, wir haben eine Datenbank mit Informationen über mehrere Vereine. Jede Tabelle zeigt die Mitglieder dieses Clubs und den Ort, den sie besuchen. Jeder Club kann mehrere verschiedene Zweigstellen oder Standorte haben, an denen er sich trifft. Die erste Tabelle ist für den book_club. Sie enthält die Namen der Clubmitglieder und die location, die sie besuchen:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street

In ähnlicher Weise enthält die Tabelle rowing_club enthält die Namen der Clubmitglieder und die location, die sie besuchen.

namelocation
MaryFair Street
SamanthaFair Street
PaulWest Street

Da wir nun unsere Tabellen haben, können wir unsere SQL-Abfrage schreiben. Unter Verwendung der UNION -Syntax erhalten wir die folgende Abfrage:

SELECT name, location 
FROM book_club

UNION

SELECT name, location 
FROM rowing_club

UNION UNION ALL führt zunächst eine Sortieroperation durch und eliminiert die Datensätze, die in allen Spalten doppelt vorhanden sind, bevor sie schließlich den kombinierten Datensatz zurückgibt. Sie sehen, dass wir in jeder Abfrage Spalten desselben Datentyps und SELECT dieselbe Anzahl von Spalten verwenden. Dies entspricht den Regeln für die Verwendung von UNION und sollte ohne Fehler ausgeführt werden.

Die Ausführung dieser Abfrage ergibt das folgende Ergebnis:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
SamanthaFair Street

Da haben wir es! Alle Mitglieder aus beiden Vereinen!

Lassen Sie uns nun die Abfrage ändern und UNION in UNION ALL umwandeln:

SELECT name, location 
FROM book_club

UNION ALL

SELECT name, location 
FROM rowing_club

Mit UNION ALL können wir erwarten, dass die Ergebnisse Duplikate enthalten. Führen wir diese neue Abfrage aus und beobachten wir die Ausgabe:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
MaryFair Street
SamanthaFair Street
PaulWest Street

Können Sie alle doppelten Datensätze erkennen? Vergleichen Sie diese Ausgabe mit unseren beiden ursprünglichen Tabellen. Sie können sehen, dass jede Zeile enthalten ist.

UNION oder UNION ALL - was sollten Sie wählen?

Da Sie nun wissen, wie Sie UNION und UNION ALL verwenden können, fragen Sie sich wahrscheinlich, welche Methode für Ihre Situation am besten geeignet ist. Eine Sache, die Sie berücksichtigen sollten, ist die Tatsache, dass UNION doppelte Datensätze entfernt, was die Leistung Ihrer Abfrage beeinträchtigen kann.

Wenn Sie sich fragen, welche Variante Sie verwenden sollen, denken Sie daran:

  • Die Verwendung von UNION führt effektiv eine SELECT DISTINCT auf die Ergebnismenge aus.
  • Wenn Sie wissen, dass alle von UNION zurückgegebenen Datensätze eindeutig sein werden, verwenden Sie UNION ALL; dies ist schneller. Dies ist besonders bei größeren Datensätzen wichtig.

Schreiben komplexer Abfragen mit UNION und UNION ALL

Wir haben uns mit den Unterschieden zwischen UNION und UNION ALL beschäftigt und erklärt, warum Sie sich für die eine oder die andere Variante entscheiden sollten. Mit diesen Informationen können Sie nun Daten aus zwei oder mehr Tabellen in Ihrer Datenbank abrufen. Sowohl UNION als auch UNION ALL spielen eine wichtige Rolle bei der Verwendung von rekursiven Abfragen, einem fortgeschrittenen Thema, das in unserem Kurs Rekursive Abfragen ausführlich behandelt wird.

Vergessen Sie nicht, ein Lesezeichen für diese Seite zu setzen, damit Sie einfachen Zugang zu den Erklärungen und Beispielen von UNION vs. UNION ALL haben. Speichern Sie auch diese Seite unseres SQL-Kochbuchs, auf der erklärt wird, wie man die Ergebnisse von zwei Abfragen in SQL kombiniert. Mit diesem Wissen können Sie Ihre SQL-Abfragen auf die nächste Stufe heben und komplexe Anwendungsfälle mit Leichtigkeit bewältigen!