SQL Server Union vs Union All

Unione e Unione Tutti vengono utilizzati per combinare due o più set di risultati in SQL. Un operatore di set Unione è diverso da SQL Joins. Unione combina due serie mentre SQL Joins combina due o più colonne in base a una condizione di riga corrispondente. Questo tutorial descrive le differenze tra Unione e Unione tutte basate su funzioni e prestazioni.

Unione tutti

1. Unione Tutto viene utilizzato per combinare due o più set di risultati come un set di risultati.
2. Union All include duplicati di due o più set di risultati.

Unione

1. Unione è utilizzata per combinare due o più set di risultati come un set di risultati.
2. Union rimuove i duplicati da due o più set di risultati.
3. Anche l'unione ordina set di risultati in ordine crescente.

Esempio: Unione vs Unione Tutti

CREATE TABLE dbo.Batsman (PK_Batman_Id INT, Name VARCHAR (255)); CREATE TABLE dbo.Bowler (PK_Bowler_Id INT, Name VARCHAR (255)); Inserisci in dbo.Batsman VALUES (1, 'Sachin Tendulkar'); Inserisci in dbo.Batsman VALUES (2, 'Rahul Dravid'); Inserisci in dbo.Batsman VALUES (3, 'Brian Lara'); Inserisci in dbo.Batsman VALUES (4, 'MS Dhoni'); Inserisci in dbo.Bowler VALUES (1, 'Sachin Tendulkar'); Inserisci in dbo.Bowler VALUES (2, 'Rahul Dravid'); SELEZIONA * DA Batsman; SELEZIONA * DA Bowler; 

Unione Tutte le operazioni

SELEZIONA Nome come Giocatore FROM dbo.Batsman UNION ALL SELEZIONA Nome come Player FROM dbo.Bowler; 
Risultato Giocatore ------------------- Sachin Tendulkar Rahul Dravid Brian Lara MS Dhoni Sachin Tendulkar Rahul Dravid (6 row (s) affected) 

La query sopra combina due gruppi di risultati delle tabelle dbo.Batsman e dbo.Bowler e mostra i nomi duplicati che appaiono in entrambe le tabelle.

Unione Imposta operazione

SELECT Name as Player FROM dbo.Batsman UNION SELECT Nome come Player FROM dbo.Bowler; 
Risultato Giocatore ------------------- Brian Lara MS Dhoni Rahul Dravid Sachin Tendulkar (4 file (s) interessati) 

La query sopra combina due set di risultati delle tabelle dbo.Batsman e dbo.Bowler senza duplicati e il risultato viene ordinato in ordine crescente.

Prestazioni: Unione contro Unione Tutte

Come vedi, Union All utilizza il 27% dell'esecuzione batch e Union utilizza l'esecuzione batch del 73%.

In questo caso, Union All è più veloce di Union perché Union All non rimuove i duplicati e ordina il set di risultati, mentre Union rimuove i duplicati e ordina il set di risultati (che richiede più tempo e un impatto sulle prestazioni). L'operatore di ordinamento distinto nel piano di esecuzione mostra che Union esegue l'ordinamento dell'insieme di input.

La migliore pratica

Quando sappiamo che i record duplicati non sono possibili in uno o più set, quindi usare Union All over Union è vantaggioso per evitare un successo nelle prestazioni.