Was ist der Unterschied zwischen UNION und UNION ALL?


Antworten:


1734

UNIONEntfernt doppelte Datensätze (wobei alle Spalten in den Ergebnissen gleich sind), UNION ALLnicht.

Es gibt einen Leistungseinbruch bei der Verwendung von UNIONanstelle von UNION ALL, da der Datenbankserver zusätzliche Arbeit leisten muss, um die doppelten Zeilen zu entfernen, aber normalerweise möchten Sie die doppelten nicht (insbesondere beim Entwickeln von Berichten).

UNION Beispiel:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Ergebnis:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL Beispiel:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Ergebnis:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

179
Dies impliziert, dass die Vereinigung viel weniger leistungsfähig ist, da das Ergebnis nach Duplikaten
Matthew Watson,

19
UNION ALL wird in der Tat performanter sein, insbesondere aufgrund des Fehlens der eindeutigen Sorte. Meine allgemeine Praxis besteht darin, UNION ALL zu verwenden, es sei denn, ich möchte ausdrücklich Duplikate.
Adam Caviness

6
Ich habe gerade bemerkt, dass es hier viele gute Kommentare / Antworten gibt, also habe ich die Wiki-Flagge aktiviert und einen Hinweis zur Leistung hinzugefügt ...
Jim Harte

250
UNION ALL kann in realen Fällen, in denen das Netzwerk wie das Internet ein Engpass ist, langsamer sein als UNION. Die Kosten für die Übertragung vieler doppelter Zeilen können den Vorteil der Abfrageausführungszeit überschreiten. Dies muss von Fall zu Fall analysiert werden.
Charles Burns

23
@AdamCaviness Dein Kommentar macht keinen Sinn.
Kojow7

285

Sowohl UNION als auch UNION ALL verketten das Ergebnis von zwei verschiedenen SQLs. Sie unterscheiden sich in der Art und Weise, wie sie mit Duplikaten umgehen.

  • UNION führt eine DISTINCT für die Ergebnismenge durch, wodurch doppelte Zeilen entfernt werden.

  • UNION ALL entfernt keine Duplikate und ist daher schneller als UNION.

Hinweis: Bei Verwendung dieser Befehle müssen alle ausgewählten Spalten vom gleichen Datentyp sein.

Beispiel: Wenn wir zwei Tabellen haben, 1) Mitarbeiter und 2) Kunde

  1. Daten der Mitarbeitertabelle:

Geben Sie hier die Bildbeschreibung ein

  1. Kundentabellendaten:

Geben Sie hier die Bildbeschreibung ein

  1. UNION-Beispiel (Alle doppelten Datensätze werden entfernt):

Geben Sie hier die Bildbeschreibung ein

  1. UNION ALL Beispiel (Es werden nur Datensätze verkettet, keine Duplikate entfernt, es ist also schneller als UNION):

Geben Sie hier die Bildbeschreibung ein


3
"Alle ausgewählten Spalten müssen vom gleichen Datentyp sein" - tatsächlich sind die Dinge nicht so streng (aus Sicht eines relationalen Modells keine gute Sache!). Der SQL-Standard besagt, dass der jeweilige Spaltendeskriptor bis auf den Namen identisch sein muss.
Tag, wenn

47

UNIONEntfernt Duplikate, UNION ALLnicht jedoch.

Um Duplikate zu entfernen, muss die Ergebnismenge sortiert werden. Dies kann sich je nach dem zu sortierenden Datenvolumen und den Einstellungen verschiedener RDBMS-Parameter (für Oracle PGA_AGGREGATE_TARGETmit WORKAREA_SIZE_POLICY=AUTOoder SORT_AREA_SIZEund) auf die Leistung der UNION auswirkenSOR_AREA_RETAINED_SIZE wenn WORKAREA_SIZE_POLICY=MANUAL) .

Grundsätzlich ist die Sortierung schneller, wenn sie im Speicher ausgeführt werden kann, es gilt jedoch die gleiche Einschränkung hinsichtlich des Datenvolumens.

Wenn Sie Daten benötigen, die ohne Duplikate zurückgegeben werden, müssen Sie dies natürlich tun UNION verwenden, abhängig von der Quelle Ihrer Daten.

Ich hätte den ersten Beitrag kommentiert, um den Kommentar "ist viel weniger performant" zu qualifizieren, habe aber nicht genügend Ruf (Punkte), um dies zu tun.


1
"Um Duplikate zu entfernen, muss die Ergebnismenge sortiert werden" - vielleicht haben Sie einen bestimmten Anbieter im Sinn, aber die Frage enthält keine herstellerspezifischen Tags. Könnten Sie auch dann nachweisen, dass Duplikate nicht ohne Sortierung entfernt werden können?
Tag, wenn

2
different sortiert die Ergebnisse "implizit", da das Entfernen von Duplikaten in einem sortierten Satz schneller ist. Dies bedeutet nicht, dass die zurückgegebene Ergebnismenge tatsächlich auf diese Weise sortiert ist, aber in den meisten Fällen wird die Ergebnismenge intern durch eindeutige (und daher UNION) sortiert.
DevilSuichiro

30

In ORACLE: UNION werden BLOB- (oder CLOB-) Spaltentypen nicht unterstützt, UNION ALL jedoch.



13

Sie können Duplikate vermeiden und trotzdem viel schneller als UNION DISTINCT (das eigentlich mit UNION identisch ist) ausführen, indem Sie die folgende Abfrage ausführen:

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

Beachten Sie das AND a!=XTeil. Das ist viel schneller als UNION.


4
Dies lässt Zeilen aus und führt daher nicht zum erwarteten Ergebnis, wenn a NULL-Werte enthält. Außerdem ist es immer noch nicht das gleiche Ergebnis wie eine Rückkehr UNION- UNIONauch Duplikate entfernt , die durch die Unterabfragen zurückgegeben werden, während Ihr Ansatz nicht.
Frank Schmitt

@FrankSchmitt - danke für diese Antwort; Dieses bisschen über Unterabfragen ist genau das, was ich wissen wollte!
Doradus

11

Um meine zwei Cent zur Diskussion hier hinzuzufügen: Man könnte den UNIONOperator als reine, SET-orientierte UNION verstehen - zB set A = {2,4,6,8}, set B = {1,2,3,4 }, A UNION B = {1,2,3,4,6,8}

Wenn Sie mit Mengen arbeiten, möchten Sie nicht, dass die Zahlen 2 und 4 zweimal erscheinen, da sich ein Element entweder in einer Menge befindet oder nicht .

In der SQL-Welt möchten Sie möglicherweise alle Elemente aus den beiden Sätzen zusammen in einer "Tasche" anzeigen {2,4,6,8,1,2,3,4}. Und zu diesem Zweck bietet T-SQL dem Bediener UNION ALL.


2
Nitpick: UNION ALLwird von T-SQL nicht "angeboten". UNION ALList Teil des ANSI SQL-Standards und nicht spezifisch für MS SQL Server.
Frank Schmitt

1
Der 'Nitpick'-Kommentar könnte bedeuten, dass Sie "Union All" in TSQL nicht verwenden können, aber Sie können. Natürlich sagt der Kommentar das nicht , aber jemand, der ihn liest, kann darauf schließen.
Joseph

10

UNION
Der UNIONBefehl wird verwendet, um verwandte Informationen aus zwei Tabellen auszuwählen, ähnlich wie der JOINBefehl. Bei Verwendung des UNIONBefehls müssen jedoch alle ausgewählten Spalten vom gleichen Datentyp sein. MitUNION werden nur unterschiedliche Werte ausgewählt.

UNION ALL
Der UNION ALLBefehl entspricht dem UNIONBefehl, außer dassUNION ALL alle Werte ausgewählt werden.

Der Unterschied zwischen Unionund Union allbesteht darin, dass Union allkeine doppelten Zeilen entfernt werden. Stattdessen werden nur alle Zeilen aus allen Tabellen abgerufen, die Ihren Abfragespezifikationen entsprechen, und sie werden zu einer Tabelle kombiniert.

Eine UNIONAnweisung wirkt sich effektiv SELECT DISTINCTauf die Ergebnismenge aus. Wenn Sie wissen, dass alle zurückgegebenen Datensätze von Ihrer Gewerkschaft eindeutig sind, verwenden Sie UNION ALLstattdessen, um schnellere Ergebnisse zu erzielen.


8

Nicht sicher, ob es darauf ankommt, welche Datenbank

UNION und UNION ALL sollte auf allen SQL Servern funktionieren.

Sie sollten unnötige UNIONs vermeiden, da diese ein großes Leistungsleck darstellen. Als Faustregel verwenden, UNION ALLwenn Sie nicht sicher sind, welche Sie verwenden sollen.


Zu dieser Frage gibt es kein SQL Server-Tag. Ich denke, die Option, die Duplikate zurückgibt, nur weil sie normalerweise am besten funktioniert, ist der falsche Rat.
Tag, wenn

1
@onedaywhen ich denke, das OP hat den Ausdruck "SQL Server" als Synonym für alle RDBMS verwendet (z. B. MySQL, PostGreSQL, Oracle, SQL Server). Der Wortlaut ist jedoch unglücklich (und natürlich könnte ich mich irren).
Frank Schmitt

@FrankSchmitt: keines der Produkte Sie aufgelistet sind wirklich RDBMS :)
onedaywhen

1
@onedayWann möchten Sie näher darauf eingehen? Zumindest en.wikipedia.org/wiki/Relational_database_management_system scheint mir zuzustimmen - es werden ausdrücklich Microsoft SQL Server, Oracle Database und MySQL erwähnt. Oder sind Sie über den Unterschied zwischen Oracle und Oracle Database z.
Frank Schmitt

8

UNION - führt zu unterschiedlichen Datensätzen,

während

UNION ALL - zu allen Datensätzen einschließlich Duplikaten führt.

Beide sind blockierende Operatoren und daher bevorzuge ich persönlich die Verwendung von JOINS gegenüber blockierenden Operatoren (UNION, INTERSECT, UNION ALL usw.) jederzeit.

Um zu veranschaulichen, warum der Betrieb der Union im Vergleich zum Auschecken der Union All eine schlechte Leistung erbringt, sehen Sie sich das folgende Beispiel an.

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

Geben Sie hier die Bildbeschreibung ein

Es folgen die Ergebnisse der Operationen UNION ALL und UNION.

Geben Sie hier die Bildbeschreibung ein

Eine UNION-Anweisung führt effektiv ein SELECT DISTINCT für die Ergebnismenge durch. Wenn Sie wissen, dass alle zurückgegebenen Datensätze von Ihrer Gewerkschaft eindeutig sind, verwenden Sie stattdessen UNION ALL, um schnellere Ergebnisse zu erzielen.

Die Verwendung von UNION führt zu eindeutigen Sortiervorgängen im Ausführungsplan. Der Beweis, um diese Aussage zu beweisen, ist unten gezeigt:

Geben Sie hier die Bildbeschreibung ein


3
Alles in dieser Antwort wurde bereits gesagt, ist zu verwirrend, um nützlich zu sein (Vorschläge für Gewerkschaften, wenn sie verschiedene Dinge tun, "Blockieren" als Grund angeben, ohne zu erklären, was Sie damit meinen oder auf welche Datenbankserver es sich bezieht) oder ist sehr irreführend (Ihre Prozentsätze in Ihrem Screenshot gelten nicht für die tatsächliche Verwendung von UNION/ UNION ALL).

Blockierungsoperatoren sind bekannte Operatoren in TSQL. Alles, was blockierende Operatoren tun, kann durch Joins erreicht werden, aber nicht umgekehrt. Die eindeutige Sortieroperation ist im Bild eingekreist, um zu zeigen, warum Union alle besser als Union funktioniert, und um genau zu zeigen, wo sie im Ausführungsplan vorhanden ist. Fühlen Sie sich frei, den Daten T1 und T2 weitere Daten hinzuzufügen, um mit den Prozentsätzen herumzuspielen!
DBA

Sie KÖNNEN technisch die Ergebnisse einer unionVerwendung einer Kombination aus joins und einigen wirklich bösen cases erzeugen , aber es macht es nahezu unmöglich, die Abfrage zu lesen und zu pflegen, und meiner Erfahrung nach ist sie auch für die Leistung schrecklich. Vergleichen Sie: select foo.bar from foo union select fizz.buzz from fizzgegenselect case when foo.bar is null then fizz.buzz else foo.bar end from foo join fizz where foo.bar is null or fizz.buzz is null
Devin Lamothe

@DBA Ihre Antwort ist nur für Benutzer von MS SQL Server relevant. Das OP erwähnte nie das RDBMS, das sie verwenden - sie verwenden möglicherweise MySQL, PostgreSQL, Oracle, SQLite, ...
Frank Schmitt

6

Mit union werden unterschiedliche Werte aus zwei Tabellen ausgewählt, wobei mit union all alle Werte einschließlich Duplikate aus den Tabellen ausgewählt werden


6

Es ist gut, mit einem Venn-Diagramm zu verstehen.

Hier ist der Link zur Quelle. Es gibt eine gute Beschreibung.

Geben Sie hier die Bildbeschreibung ein


5
Ihr zweites Bild deutet darauf hin, dass sich die beiden gegenseitig ausschließen, wenn dies nicht der Fall ist. Das Bild sollte eher das gleiche wie das erste zeigen, aber die 'Schnittpunktellipse' ()wird ein zweites Mal gezeigt. Da das union allErgebnis keine Menge ist, sollten Sie eigentlich nicht versuchen, es mit einem Venn-Diagramm zu zeichnen!
Tag, wenn

5

(Aus Microsoft SQL Server Book Online)

UNION [ALL]

Gibt an, dass mehrere Ergebnismengen kombiniert und als einzelne Ergebnismenge zurückgegeben werden sollen.

ALLE

Integriert alle Zeilen in die Ergebnisse. Dies schließt Duplikate ein. Wenn nicht angegeben, werden doppelte Zeilen entfernt.

UNIONDies dauert zu lange, da DISTINCTauf die Ergebnisse doppelte Zeilen angewendet werden.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

ist äquivalent zu:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

Ein Nebeneffekt beim Anwenden DISTINCTauf Ergebnisse ist eine Sortieroperation für Ergebnisse.

UNION ALLDie Ergebnisse werden in beliebiger Reihenfolge für die Ergebnisse UNIONangezeigt. Die Ergebnisse werden jedoch so angezeigt, wie ORDER BY 1, 2, 3, ..., n (n = column number of Tables)sie auf die Ergebnisse angewendet werden. Sie können diesen Nebeneffekt sehen, wenn Sie keine doppelte Zeile haben.


5

Ich füge ein Beispiel hinzu,

UNION wird mit eindeutig -> langsamer zusammengeführt, da ein Vergleich erforderlich ist (Wählen Sie in Oracle SQL Developer die Abfrage aus und drücken Sie F10, um die Kostenanalyse anzuzeigen).

UNION ALL , es verschmilzt ohne Unterschied -> schneller.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

und

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

2

UNION führt den Inhalt zweier strukturkompatibler Tabellen zu einer einzigen kombinierten Tabelle zusammen.

  • Unterschied:

Der Unterschied zwischen UNIONund UNION ALLbesteht darin, dass UNION willdoppelte Datensätze weggelassen UNION ALLwerden, während doppelte Datensätze enthalten sind.

UnionDie Ergebnismenge ist in aufsteigender Reihenfolge sortiert, während die UNION ALLErgebnismenge nicht sortiert ist

UNIONführt eine DISTINCTErgebnismenge durch, um doppelte Zeilen zu entfernen. Während UNION ALLnicht Duplikate entfernen und daher ist es schneller als UNION. *

Hinweis : Die Leistung von ist UNION ALLin der Regel besser als UNION, da UNIONder Server die zusätzliche Arbeit zum Entfernen von Duplikaten ausführen muss. In Fällen, in denen sicher ist, dass keine Duplikate vorhanden sind oder in denen Duplikate kein Problem darstellen, wird die Verwendung von UNION ALLaus Leistungsgründen empfohlen.


1
"Union Result Set ist in aufsteigender Reihenfolge sortiert" - Sofern keine vorhanden ist ORDER BY, werden sortierte Ergebnisse nicht garantiert. Vielleicht haben Sie einen bestimmten SQL-Anbieter im Sinn (selbst dann in aufsteigender Reihenfolge, was genau ...?), Aber diese Frage hat keine herstellerspezifischen Tags.
Tag, wenn

"führt den Inhalt von zwei strukturell kompatiblen Tabellen zusammen" - ich denke, Sie haben diesen Teil wirklich gut angegeben :)
am

2

Angenommen, Sie haben zwei Tischlehrer und -schüler

Beide haben 4 Spalten mit unterschiedlichen Namen wie diesen

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

Geben Sie hier die Bildbeschreibung ein

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

Geben Sie hier die Bildbeschreibung ein

Sie können UNION oder UNION ALL für die beiden Tabellen anwenden, die dieselbe Anzahl von Spalten haben. Sie haben jedoch einen anderen Namen oder Datentyp.

Wenn Sie eine UNIONOperation auf 2 Tabellen anwenden , werden alle doppelten Einträge vernachlässigt (alle Spaltenwerte der Zeile in einer Tabelle sind mit denen einer anderen Tabelle identisch). So was

SELECT * FROM Student
UNION
SELECT * FROM Teacher

das Ergebnis wird sein

Geben Sie hier die Bildbeschreibung ein

Wenn Sie eine UNION ALLOperation auf 2 Tabellen anwenden , werden alle Einträge mit Duplikaten zurückgegeben (wenn zwischen einem Spaltenwert einer Zeile in 2 Tabellen ein Unterschied besteht). So was

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Ausgabe Geben Sie hier die Bildbeschreibung ein

Performance:

Offensichtlich ist die Leistung von UNION ALL besser als die von UNION, da sie zusätzliche Aufgaben zum Entfernen der doppelten Werte ausführen. Sie können dies anhand der geschätzten Ausführungszeit überprüfen, indem Sie bei MSSQL Strg + L drücken


"Ja wirklich?" Für ein vierreihiges Ergebnis?! Ich würde denken, dass dies ein Szenario ist, in dem Sie UNIONAbsichten vermitteln möchten (dh keine Duplikate), da UNION ALLes unwahrscheinlich ist, dass in absoluten Zahlen ein realer Leistungsgewinn erzielt wird.
Tag, wenn

2

In sehr einfachen Worten besteht der Unterschied zwischen UNION und UNION ALL darin, dass UNION doppelte Datensätze weglässt, während UNION ALL doppelte Datensätze enthält.


1

Eine weitere Sache, die ich hinzufügen möchte-

Union : - Die Ergebnismenge ist in aufsteigender Reihenfolge sortiert.

Union All : - Die Ergebnismenge ist nicht sortiert. Zwei Abfrage-Ausgaben werden nur angehängt.


Wahr ! UNION kann die Reihenfolge der beiden Unterergebnisse ändern.
Gracchus

6
Das ist falsch. A UNIONwird NICHT sortiert das Ergebnis in aufsteigender Reihenfolge. Jede Bestellung, die Sie in einem Ergebnis ohne Verwendung sehen, order byist reiner Zufall. Dem DBMS steht es frei, jede Strategie zu verwenden, die es für effizient hält, um die Duplikate zu entfernen. Dies könnte eine Sortierung sein, aber es könnte auch ein Hashing-Algorithmus oder etwas ganz anderes sein - und die Strategie ändert sich mit der Anzahl der Zeilen. Eine union, die mit 100 Zeilen sortiert erscheint, ist möglicherweise nicht mit 100.000 Zeilen versehen
a_horse_with_no_name

2
Ohne eine ORDER BY-Klausel in der Abfrage kann das RDBMS die Zeilen in beliebiger Reihenfolge zurückgeben. Die Beobachtung, dass die Ergebnismenge einer UNION-Operation "in aufsteigender Reihenfolge" zurückgegeben wird, ist nur ein Nebenprodukt einer von der Datenbank ausgeführten "sort eindeutig" -Operation. Das beobachtete Verhalten ist nicht garantiert. Verlassen Sie sich also nicht darauf. Wenn die Spezifikation Zeilen in einer bestimmten Reihenfolge zurückgeben soll, fügen Sie eine entsprechende ORDER BYKlausel hinzu.
Spencer7593

1

Unterschied zwischen Union und Union ALL In Sql

Was ist Union in SQL?

Der UNION-Operator wird verwendet, um die Ergebnismenge von zwei oder mehr Datensätzen zu kombinieren.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

Union gegen Union alle mit Beispiel


1

Wichtig! Unterschied zwischen Oracle und MySQL: Nehmen wir an, dass t1 t2 keine doppelten Zeilen enthält, sondern einzelne Zeilen. Beispiel: t1 hat Verkäufe ab 2017 und t2 ab 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

In ORACLE UNION ALL werden alle Zeilen aus beiden Tabellen abgerufen. Das gleiche wird in MySQL auftreten.

Jedoch:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

In ORACLE ruft UNION alle Zeilen aus beiden Tabellen ab, da zwischen t1 und t2 keine doppelten Werte vorhanden sind. Andererseits hat die Ergebnismenge in MySQL weniger Zeilen, da es doppelte Zeilen in Tabelle t1 und auch in Tabelle t2 gibt!


0

UNION entfernt doppelte Datensätze, UNION ALL hingegen nicht. Es muss jedoch der Großteil der Daten überprüft werden, die verarbeitet werden sollen, und die Spalte und der Datentyp müssen identisch sein.

Da Union intern "unterschiedliches" Verhalten verwendet, um die Zeilen auszuwählen, ist dies in Bezug auf Zeit und Leistung teurer. mögen

select project_id from t_project
union
select project_id from t_project_contact  

Das gibt mir 2020 Rekorde

andererseits

select project_id from t_project
union all
select project_id from t_project_contact

gibt mir mehr als 17402 Zeilen

In der Prioritätsperspektive haben beide die gleiche Priorität.


0

Wenn dies nicht der Fall ist ORDER BY, UNION ALLkann a Zeilen nach und nach zurückbringen, während a UNIONSie bis zum Ende der Abfrage warten lässt, bevor Sie die gesamte Ergebnismenge auf einmal erhalten. Dies kann in einer Auszeitsituation einen Unterschied machen - a UNION ALLhält die Verbindung sozusagen am Leben.

Wenn Sie also ein Timeout-Problem haben und es keine Sortierung gibt und Duplikate kein Problem sind, UNION ALLkann dies hilfreich sein.


Aber Ihr erster Teil der Ergebnisse könnte eine Zeile sein, die viele Male dupliziert wurde: Wie nützlich ist das?!
Tag, wenn

0

UNION und UNION ALL werden verwendet, um zwei oder mehr Abfrageergebnisse zu kombinieren.

Der Befehl UNION wählt unterschiedliche und verwandte Informationen aus zwei Tabellen aus, wodurch doppelte Zeilen eliminiert werden.

Auf der anderen Seite wählt der Befehl UNION ALL alle Werte aus beiden Tabellen aus, wodurch alle Zeilen angezeigt werden.


0

Verwenden Sie aus Gewohnheit immer UNION ALL . Verwenden Sie UNION nur in besonderen Fällen, wenn Sie Duplikate entfernen müssen, die extrem chaotisch sein können, und Sie können alles in den anderen Kommentaren hier lesen.


0

UNION ALLfunktioniert auch mit mehr Datentypen. Zum Beispiel beim Versuch, räumliche Datentypen zu vereinen. Zum Beispiel:

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

wird werfen

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

Allerdings union allwird nicht.


-1

Der einzige Unterschied ist:

"UNION" entfernt doppelte Zeilen.

"UNION ALL" entfernt keine doppelten Zeilen.


13
Wie erhöht dies den Wert gegenüber der akzeptierten Antwort?
Nick

@ Nick Es ist kürzere Antwort.
Mostafa Vatanpour

Kürzere können von Vorteil sein, wenn Sie einen wesentlichen Teil der akzeptierten Antwort lesen müssen, um diese Daten zu erhalten. In diesem Fall enthält die akzeptierte Antwort jedoch alle diese Informationen im allerersten Satz. Anschließend werden die Auswirkungen des Unterschieds im Detail erörtert.
dmckee --- Ex-Moderator Kätzchen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.