Frage

Was ist der Unterschied zwischen UNION und UNION ALL?

War es hilfreich?

Lösung

UNION entfernt doppelte Einträge (wo alle Spalten, in der die Ergebnisse sind die gleichen), UNION ALL nicht.

Es ist ein performance-hit, wenn mit UNION statt UNION ALL, da der Datenbank-server muss zusätzliche Arbeit zu entfernen Sie doppelte Zeilen, aber in der Regel Sie tun nicht wollen die Duplikate (vor allem bei der Entwicklung von reports).

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)

Andere Tipps

Sowohl UNION und UNION ALL verketten, das Ergebnis von zwei verschiedenen SQL-Anweisungen aus.Sie unterscheiden sich in der Art, wie Sie Duplikate verarbeiten.

  • UNION führt eine AUSGEPRÄGTE auf das Ergebnis gesetzt, sodass keine doppelten Zeilen.

  • UNION ALL keine Duplikate entfernen, und es daher schneller als die UNION.

Hinweis: Bei der Verwendung dieser Befehle alle ausgewählten Spalten müssen denselben Datentyp haben.

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

  1. Employee-Tabelle Daten:

enter image description here

  1. Customer-Tabelle Daten:

enter image description here

  1. UNION Beispiel (Es entfernt alle doppelten Datensätze):

enter image description here

  1. UNION ALL Beispiel (Es ist einfach verketten Datensätze, nicht beseitigen Sie Duplikate, so dass es schneller als UNION):

enter image description here

UNION entfernt Duplikate, in der Erwägung, dass UNION ALL nicht.

Um Duplikate entfernen der Ergebnismenge müssen sortiert werden, und diese Mai einen Einfluss auf die Leistungsfähigkeit der UNION, je nach der Menge der Daten, die sortiert wird, und die Einstellungen der verschiedenen RDBMS-Parameter ( Für Oracle PGA_AGGREGATE_TARGET mit WORKAREA_SIZE_POLICY=AUTO oder SORT_AREA_SIZE und SOR_AREA_RETAINED_SIZE wenn WORKAREA_SIZE_POLICY=MANUAL ).

Im Grunde, ist die Art schneller, wenn es kann durchgeführt werden in Erinnerung, aber den gleichen Nachteil des Datenvolumens gilt.

Natürlich, wenn Sie benötigen die Daten zurückgegeben, ohne Duplikate dann Sie muss verwenden Sie UNION, abhängig von der Quelle der Daten.

Ich würde kommentiert haben den ersten post zu qualifizieren ", ist viel weniger performant" Kommentar, aber nicht genügend Ruf (Punkte) zu tun.

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

Der grundlegende Unterschied zwischen UNION und UNION ALL union " operation beseitigt die doppelten Zeilen aus der Ergebnismenge, aber union all gibt alle Zeilen nach dem Beitritt.

von http://zengin.wordpress.com/2007/07/31/union-vs-union-all/

Vermeiden Sie Duplikate und noch viel schneller laufen als UNION DISTINCT (das ist eigentlich dasselbe wie UNION), die durch ausführen der Abfrage wie diese:

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

Beachten Sie die AND a!=X Teil.Dies ist viel schneller dann die UNION.

Nur meine zwei Cent hinzu, um die Diskussion hier:man konnte verstehen, die UNION Betreiber ist eine Reine, SET-orientierte UNION - z.B.set A={2,4,6,8}, B={1,2,3,4}, A UNION B = {1,2,3,4,6,8}

Beim Umgang mit Mengen, die Sie würde nicht wollen zahlen 2 und 4 erscheinen zweimal, als ein element entweder ist oder nicht in einem Satz.

In die Welt von SQL, obwohl, möchten Sie vielleicht, um zu sehen, alle Elemente, die aus den beiden Sätzen, die zusammen in einer "Tasche" {2,4,6,8,1,2,3,4}.Und für diesen Zweck T-SQL bietet der Betreiber UNION ALL.

UNION
Die UNION Befehl verwendet wird, um Informationen aus zwei Tabellen, ähnlich wie die JOIN Befehl.Allerdings, wenn Sie die UNION Befehl alle selektierten Spalten müssen denselben Datentyp haben.Mit UNION, nur unterschiedliche Werte ausgewählt werden.

UNION ALL
Die UNION ALL Befehl ist gleich der UNION Befehl, mit der Ausnahme, dass UNION ALL wählt alle Werte.

Der Unterschied zwischen Union und Union all ist, dass Union all nicht doppelte Zeilen entfernen, sondern es zieht Sie alle Zeilen aus allen Tabellen, die für Ihre Abfrage Besonderheiten und vereint Sie in eine Tabelle ein.

Ein UNION Anweisung effektiv ist eine SELECT DISTINCT auf die Ergebnisse setzen.Wenn Sie wissen, dass alle Datensätze zurückgegeben, sind einzigartig von Ihrer union-Nutzung UNION ALL statt, es gibt schnellere Ergebnisse.

Nicht sicher, dass es darauf ankommt, in welcher Datenbank

UNION und UNION ALL sollte auf allen SQL-Servern.

Sie sollten es vermeiden, unnötige UNIONs Sie werden enormen performance-Leck.Als Faustregel gilt verwenden UNION ALL wenn Sie nicht sicher sind, welche zu verwenden.

union wird verwendet, um wählen Sie verschiedene Werte aus zwei Tabellen wo, wie union all verwendet wird, um alle Werte inklusive Duplikate aus den Tabellen

UNION - Ergebnisse in verschiedene records

während

UNION - Ergebnisse, die Sie in alle Datensätze einschließlich der Duplikate.

Beide sind blockierende Operatoren und daher habe ich persönlich lieber mit JOINS über Blockierende Operatoren(UNION, INTERSECT, UNION, etc. jederzeit.

Um zu verdeutlichen, weshalb die Union-operation schlecht im Vergleich zu Union Kasse-das folgende Beispiel.

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'

enter image description here

Im folgenden sind die Ergebnisse der UNION-und UNION-Operationen.

enter image description here

Einer UNION-Anweisung effektiv macht ein SELECT DISTINCT auf die Ergebnisse setzen.Wenn Sie wissen, dass alle Datensätze zurückgegeben, sind einzigartig von Ihrer union, die Verwendung von UNION ALL statt, es gibt schnellere Ergebnisse.

Verwendung von UNION-Ergebnisse in Distinct Art Operationen im Ausführungsplan.Beweis zum Beweis dieser Aussage ist unten dargestellt:

enter image description here

(Microsoft SQL Server Online Buchen)

UNION [ALL]

Gibt an, dass mehrere Ergebnis-sets miteinander kombiniert werden und kehrte als ein einzelnes ResultSet.

ALLE

Enthält alle Zeilen in das Ergebnis.Diese Duplikate enthält.Wenn nicht angegeben, werden doppelte Zeilen entfernt.

UNION wird zu lange dauern wie eine doppelte Zeilen finden wie DISTINCT angewandt auf die Ergebnisse.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

ist äquivalent zu:

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

Eine Nebenwirkung der Anwendung DISTINCT über die Ergebnisse ist eine Sortieren Betrieb auf die Ergebnisse.

UNION ALL Ergebnisse werden angezeigt beliebig um auf die Ergebnisse, Aber UNION Ergebnisse werden angezeigt ORDER BY 1, 2, 3, ..., n (n = column number of Tables) angewendet auf die Ergebnisse.Sie sehen diese Seite, wenn Sie haben keine doppelte Reihe.

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

hier ist die link auf die Quelle.Es ist eine gute Beschreibung.

enter image description here

Ich füge ein Beispiel,

UNION, es ist die Verschmelzung mit deutlichen --> langsamer, weil Sie müssen vergleichen (In Oracle SQL developer, wählen Sie Abfrage, drücken Sie die Taste F10, um zu sehen, Kosten-Analyse).

UNION ALL, es ist die Verschmelzung ohne deutliche --> 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;

UNION führt den Inhalt von zwei strukturell-kompatible Tabellen in einer einzigen Tabelle kombiniert.

  • Unterschied:

Der Unterschied zwischen UNION und UNION ALL ist, dass UNION will ohne doppelte Datensätze in der Erwägung, dass UNION ALL gehören Sie doppelte Datensätze.

Union Ergebnismenge in aufsteigender Reihenfolge sortiert in der Erwägung, dass UNION ALL ResultSet ist nicht sortiert

UNION führt eine DISTINCT auf Ihr Ergebnis einstellen, so wird es zu beseitigen Sie alle doppelten Zeilen.In der Erwägung, dass UNION ALL nicht Duplikate entfernen und ist daher schneller als UNION.*

Hinweis: Die Leistung UNION ALL wird in der Regel besser als UNION, da UNION benötigt der server zu tun, das weitere arbeiten alle Duplikate zu entfernen.Also, in Fällen, in denen es sicher ist, dass es keine Duplikate, oder wo Duplikate ist kein problem, die Verwendung von UNION ALL zu empfehlen wäre aus performance-Gründen.

Angenommen, Sie haben zwei Tabellen Lehrer & Student

Beide haben 4 Spalte mit verschiedenen Namen wie diese

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

enter image description here

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

enter image description here

Sie können gelten UNION oder UNION ALL für diejenigen, die zwei Tabellen die gleiche Anzahl von Spalten.Sie haben aber verschiedene Namen oder Datentyp.

Wenn Sie sich bewerben UNION Betrieb über 2 Tabellen, vernachlässigt alle doppelten Einträge(alle Spalten mit dem Wert der Zeile in einer Tabelle ist dieselbe von einer anderen Tabelle).Wie diese

SELECT * FROM Student
UNION
SELECT * FROM Teacher

das Ergebnis wird sein

enter image description here

Wenn Sie sich bewerben UNION ALL Betrieb auf 2 Tischen, es gibt alle Einträge mit "duplizieren" (wenn es einen Unterschied zwischen jeder Spalte Wert der Zeile in 2 Tabellen).Wie diese

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

Ausgabe enter image description here

Leistung:

Offensichtlich UNION ALL die Leistung ist besser, dass UNION wie Sie eine zusätzliche Aufgabe zu entfernen Sie die doppelten Werte.Sie können überprüfen, ob Ausführung Geschätzte Zeit durch drücken Strg+L am MSSQL

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

Union:- Ergebnismenge in aufsteigender Reihenfolge sortiert.

Union All:- Result-set wird nicht sortiert.zwei Abfrage-Ausgabe wird einfach angehängt.

In sehr einfachen Worten den Unterschied zwischen UNION und UNION ALL ist, dass die UNION ohne doppelte Datensätze in der Erwägung, dass die UNION ALL gehören doppelte Datensätze.

Unterschied Zwischen Union Vs Union ALL In Sql

Was Ist Union In SQL?

Der UNION-operator wird verwendet, um zu kombinieren, das Ergebnis von zwei oder mehr Daten-set .

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 Vs Union All Mit Beispiel

Wichtig!Unterschied zwischen Oracle-und Mysql:Nehmen wir an, dass t1 t2 haben keine doppelten Zeilen zwischen Ihnen, aber Sie haben doppelte Zeilen individuell.Beispiel:t1 hat sich der Umsatz von 2017 und t2 von 2018

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

In ORACLE UNION ALL-ruft alle Zeilen aus beiden Tabellen.Das gleiche geschieht in MySQL.

Jedoch:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

In ORACLE, Die UNION ruft alle Zeilen aus beiden Tabellen, weil es keine doppelten Werte zwischen t1 und t2.Auf der anderen Seite in der MySQL die Ergebnismenge wird weniger Zeilen, weil es doppelte Zeilen in Tabelle t1 und im t2-Tabelle!

UNION löscht doppelte Datensätze in der anderen hand UNION ALL nicht.Aber man braucht, zu prüfen, die Massen von Daten, die verarbeitet werden und der Spaltenname und Datentyp muss gleich sein.

da die union intern "unterschiedliche" Verhalten zum auswählen der Zeilen, daher ist es teurer in Bezug auf Zeit und Leistung.wie

select project_id from t_project
union
select project_id from t_project_contact  

das gibt mir 2020 records

auf der anderen Seite

select project_id from t_project
union all
select project_id from t_project_contact

gibt mir mehr als 17402 Zeilen

auf Vorrang-Perspektive sowohl hat die gleiche Rangfolge.

Wenn es ist keine ORDER BY, ein UNION ALL vielleicht bringen Zeilen zurück, als es geht, in der Erwägung, dass eine UNION würde Sie warten, bis die sehr Ende der Abfrage, bevor er Ihnen das gesamte Ergebnis auf einmal.Dies kann einen Unterschied machen in einer time-out-situation - eine UNION ALL hält die Verbindung aufrecht, wie es war.

Wenn Sie also eine time-out-Problem, und es gibt keine Sortierung, und Duplikate sind nicht ein Problem, UNION ALL eher hilfreich.

UNION und UNION ALL verwendet, um zu kombinieren zwei oder mehrere Abfrage-Ergebnisse.

UNION Befehl wählt deutliche und zugehörige Informationen aus zwei Tabellen, die eliminiert doppelte Zeilen.

Auf der anderen Seite, UNION ALL " wählt alle Werte aus beiden Tabellen, die zeigt alle Zeilen.

Der einzige Unterschied ist :

"UNION" entfernt doppelte Zeilen.

"UNION ALL" nicht entfernen Sie doppelte Zeilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top