SQL Server Union vs. Union All

Union und Union All werden verwendet, um zwei oder mehr Ergebnismengen in SQL zu kombinieren. Ein Union-Set-Operator unterscheidet sich von SQL-Joins. Union kombiniert zwei Sätze, während SQL Joins zwei oder mehr Spalten basierend auf einer übereinstimmenden Zeilenbedingung kombiniert. Dieses Tutorial beschreibt die Unterschiede zwischen Union und Union All, basierend auf Funktion und Leistung.

Union All

1. Union All wird verwendet, um zwei oder mehr Ergebnissätze zu einem Ergebnissatz zusammenzufassen.
2. Union All umfasst Duplikate aus zwei oder mehr Ergebnissätzen.

Union

1. Union wird verwendet, um zwei oder mehr Ergebnissätze zu einem Ergebnissatz zusammenzufassen.
2. Union entfernt Duplikate aus zwei oder mehr Ergebnissätzen.
3. Union sortiert Ergebnissätze ebenfalls in aufsteigender Reihenfolge.

Beispiel: Union vs Union All

CREATE TABLE dbo.Batsman (PK_Batman_Id INT, Name VARCHAR (255)); CREATE TABLE dbo.Bowler (PK_Bowler_Id INT, Name VARCHAR (255)); Einfügen in dbo.Batsman WERTE (1, 'Sachin Tendulkar'); Einfügen in dbo.Batsman WERTE (2, 'Rahul Dravid'); Einfügen in dbo.Batsman VALUES (3, 'Brian Lara'); Einfügen in dbo.Batsman VALUES (4, 'MS Dhoni'); Einfügen in dbo.Bowler WERTE (1, 'Sachin Tendulkar'); Einfügen in dbo.Bowler WERTE (2, 'Rahul Dravid'); SELECT * FROM Batsman; SELECT * FROM Bowler; 

Alle Einstellungen festlegen

SELECT Name als Spieler FROM dbo.Batsman UNION ALL SELECT Name als Spieler FROM dbo.Bowler; 
Ergebnis Spieler ------------------- Sachin Tendulkar Rahul Dravid Brian Lara MS Dhoni Sachin Tendulkar Rahul Dravid (6 betroffene Reihen) 

Die obige Abfrage kombiniert zwei Ergebnismengen aus den Tabellen dbo.Batsman und dbo.Bowler und zeigt doppelte Namen, die in beiden Tabellen angezeigt werden.

Union Set Operation

SELECT Name als Spieler FROM dbo.Batsman UNION SELECT Name als Spieler FROM dbo.Bowler; 
Ergebnis Spieler ------------------- Brian Lara MS Dhoni Rahul Dravid Sachin Tendulkar (4 Reihen betroffen) 

Die obige Abfrage kombiniert zwei Ergebnismengen aus den Tabellen dbo.Batsman und dbo.Bowler ohne Duplikate, und das Ergebnis wird in aufsteigender Reihenfolge sortiert.

Leistung: Union vs Union All

Wie Sie sehen, verwendet Union All 27% der Batch-Ausführung und Union 73% der Batch-Ausführung.

In diesem Fall ist Union All schneller als Union, da Union All keine Duplikate entfernt und die Ergebnismenge sortiert, während Union Duplikate entfernt und die Ergebnismenge sortiert (was mehr Zeit und einen Performance-Treffer erfordert). Der eindeutige Sortieroperator im Ausführungsplan zeigt, dass Union die Eingabesätze sortiert.

Beste Übung

Wenn wir wissen, dass doppelte Datensätze in einem oder mehreren Sätzen nicht möglich sind, ist die Verwendung von Union All over Union von Vorteil, um Leistungseinbußen zu vermeiden.