Qual è la differenza tra UNION e UNION ALL?
Domanda
Qual è la differenza tra UNION
E UNION ALL
?
Soluzione
UNION
rimuove i record duplicati (dove tutte le colonne nei risultati sono uguali), UNION ALL
non.
Si verifica un calo delle prestazioni durante l'utilizzo UNION
invece di UNION ALL
, poiché il server del database deve svolgere un lavoro aggiuntivo per rimuovere le righe duplicate, ma in genere non si desidera avere duplicati (soprattutto quando si sviluppano report).
UNIONE Esempio:
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Risultato:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
UNION ALL esempio:
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Risultato:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Altri suggerimenti
Sia UNION che UNION ALL concatenano il risultato di due SQL diversi.Differiscono nel modo in cui gestiscono i duplicati.
UNION esegue un DISTINCT sul set di risultati, eliminando eventuali righe duplicate.
UNION ALL non rimuove i duplicati ed è quindi più veloce di UNION.
Nota: Durante l'utilizzo di questi comandi tutte le colonne selezionate devono essere dello stesso tipo di dati.
Esempio:Se abbiamo due tabelle, 1) Employee e 2) Customer
- Dati della tabella dipendenti:
- Dati tabella clienti:
- Esempio UNION (Rimuove tutti i record duplicati):
- UNION ALL Esempio (Concatena semplicemente i record, non elimina i duplicati, quindi è più veloce di UNION):
UNION
rimuove i duplicati, mentre UNION ALL
non.
Per rimuovere i duplicati è necessario ordinare il set di risultati e this Maggio hanno un impatto sulle prestazioni dell'UNION, a seconda del volume di dati da ordinare e delle impostazioni di vari parametri RDBMS (per Oracle PGA_AGGREGATE_TARGET
con WORKAREA_SIZE_POLICY=AUTO
O SORT_AREA_SIZE
E SOR_AREA_RETAINED_SIZE
Se WORKAREA_SIZE_POLICY=MANUAL
).
Fondamentalmente l'ordinamento è più veloce se può essere eseguito in memoria, ma vale lo stesso avvertimento per il volume dei dati.
Naturalmente, se hai bisogno che i dati vengano restituiti senza duplicati, allora tu dovere usa UNION, a seconda della fonte dei tuoi dati.
Avrei commentato il primo post per qualificare il commento "è molto meno performante", ma non ho una reputazione (punti) sufficiente per farlo.
In ORACOLO:UNION non supporta i tipi di colonna BLOB (o CLOB), UNION ALL sì.
La differenza fondamentale tra UNION e UNION ALL è che l'operazione di unione elimina le righe duplicate dal set di risultati ma union all restituisce tutte le righe dopo l'unione.
da http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Puoi evitare duplicati ed eseguire comunque molto più velocemente di UNION DISTINCT (che in realtà è uguale a UNION) eseguendo una query in questo modo:
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
Notare il AND a!=X
parte.Questo è molto più veloce di UNION.
Giusto per aggiungere i miei due centesimi alla discussione qui:si potrebbe capire il UNION
operatore come un'UNIONE pura, orientata al SET - ad es.insieme A={2,4,6,8}, insieme B={1,2,3,4}, A UNIONE B = {1,2,3,4,6,8}
Quando si ha a che fare con gli insiemi, non vorremmo che i numeri 2 e 4 appaiano due volte, come elemento È O non è in un insieme.
Nel mondo di SQL, tuttavia, potresti voler vedere tutti gli elementi dei due insiemi insieme in un "sacchetto" {2,4,6,8,1,2,3,4}.E a questo scopo T-SQL offre all'operatore UNION ALL
.
UNIONE
IL UNION
Il comando viene utilizzato per selezionare informazioni correlate da due tabelle, proprio come il file JOIN
comando.Tuttavia, quando si utilizza il UNION
comando tutte le colonne selezionate devono essere dello stesso tipo di dati.Con UNION
, vengono selezionati solo valori distinti.
UNIONE TUTTI
IL UNION ALL
il comando è uguale a UNION
comando, tranne quello UNION ALL
seleziona tutti i valori.
La differenza tra Union
E Union all
è questo Union all
non eliminerà le righe duplicate, ma estrarrà semplicemente tutte le righe da tutte le tabelle che soddisfano le specifiche della query e le combinerà in una tabella.
UN UNION
l'istruzione fa effettivamente a SELECT DISTINCT
sui risultati impostati.Se sai che tutti i record restituiti sono unici dal tuo sindacato, utilizza UNION ALL
invece, dà risultati più rapidi.
Non sono sicuro che sia importante quale database
UNION
E UNION ALL
dovrebbe funzionare su tutti i server SQL.
Dovresti evitare cose inutili UNION
s sono enormi perdite di prestazioni.Come regola pratica di utilizzo UNION ALL
se non sei sicuro di quale utilizzare.
L'unione viene utilizzata per selezionare valori distinti da due tabelle in cui l'Unione viene utilizzata per selezionare tutti i valori, inclusi i duplicati dalle tabelle
UNIONE – risulta distinto record
Mentre
UNION ALL: restituisce tutti i record inclusi i duplicati.
Entrambi sono operatori di blocco e quindi personalmente preferisco utilizzare JOINS rispetto agli operatori di blocco (UNION, INTERSECT, UNION ALL ecc.) in qualsiasi momento.
Per illustrare il motivo per cui l'operazione Union ha prestazioni scadenti rispetto al checkout Union All, utilizzare il seguente esempio.
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'
Di seguito sono riportati i risultati delle operazioni UNION ALL e UNION.
Un'istruzione UNION esegue effettivamente un SELECT DISTINCT sul set di risultati.Se sai che tutti i record restituiti sono univoci dalla tua unione, utilizza invece UNION ALL per ottenere risultati più rapidi.
Utilizzando UNION si ottiene Ordinamento distinto operazioni previste dal Piano di Esecuzione.La prova per dimostrare questa affermazione è mostrata di seguito:
(Dalla documentazione online di Microsoft SQL Server)
UNIONE [TUTTI]
Specifica che più set di risultati devono essere combinati e restituiti come un unico set di risultati.
TUTTO
Incorpora tutte le righe nei risultati.Ciò include i duplicati.Se non specificato, le righe duplicate verranno rimosse.
UNION
richiederà troppo tempo per trovare righe duplicate simili DISTINCT
viene applicato sui risultati.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
è equivalente a:
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
Un effetto collaterale dell'applicazione
DISTINCT
i risultati sono a operazione di smistamento sui risultati.
UNION ALL
i risultati verranno mostrati come arbitrario ordine sui risultati Ma UNION
i risultati verranno mostrati come ORDER BY 1, 2, 3, ..., n (n = column number of Tables)
applicato sui risultati.Puoi vedere questo effetto collaterale quando non hai alcuna riga duplicata.
Aggiungo un esempio,
UNIONE, si sta fondendo con distinto --> più lento, perché necessita di confronto (nello sviluppatore Oracle SQL, scegli query, premi F10 per visualizzare l'analisi dei costi).
UNIONE TUTTI, si sta fondendo senza distinzione --> più veloce.
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
E
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;
UNION
unisce il contenuto di due tabelle strutturalmente compatibili in un'unica tabella combinata.
- Differenza:
La differenza tra UNION
E UNION ALL
è questo UNION will
omettere i record duplicati mentre UNION ALL
includerà record duplicati.
Union
Il set di risultati è ordinato in ordine crescente mentre UNION ALL
Il set di risultati non è ordinato
UNION
esegue a DISTINCT
sul set di risultati in modo da eliminare eventuali righe duplicate.Mentre UNION ALL
non rimuoverà i duplicati e quindi è più veloce di UNION
.*
Nota: Le prestazioni di UNION ALL
sarà in genere migliore di UNION
, Da UNION
richiede che il server esegua il lavoro aggiuntivo di rimozione di eventuali duplicati.Quindi, nei casi in cui è certo che non ci saranno duplicati, o dove avere duplicati non è un problema, l'uso di UNION ALL
sarebbe consigliato per motivi di prestazioni.
Supponiamo di avere due table Insegnante & Alunno
Entrambi hanno 4 Colonne con nome diverso come questo
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
Puoi applicare UNION o UNION ALL per quelle due tabelle che hanno lo stesso numero di colonne.Ma hanno nomi o tipi di dati diversi.
Quando ti candidi UNION
operazione su 2 tabelle, trascura tutte le voci duplicate (il valore di tutte le colonne della riga in una tabella è lo stesso di un'altra tabella).Come questo
SELECT * FROM Student
UNION
SELECT * FROM Teacher
il risultato sarà
Quando ti candidi UNION ALL
operazione su 2 tabelle, restituisce tutte le voci con duplicato (se c'è qualche differenza tra qualsiasi valore di colonna di una riga in 2 tabelle).Come questo
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Prestazione:
Ovviamente UNIONE TUTTI le prestazioni sono migliori UNIONE poiché svolgono attività aggiuntive per rimuovere i valori duplicati.Puoi verificarlo da Tempo stimato di esecuzione dalla stampa ctrl+L A MS SQL
Un'altra cosa che vorrei aggiungere-
Unione:- Il set di risultati è ordinato in ordine crescente.
Unione Tutti:- Il set di risultati non è ordinato.due output della query vengono semplicemente aggiunti.
In parole molto semplici, la differenza tra UNION e UNION ALL è che UNION ometterà record duplicati mentre UNION ALL includerà record duplicati.
Differenza tra Unione Vs Unione ALL in Sql
Cos'è l'unione in SQL?
L'operatore UNION viene utilizzato per combinare il set di risultati di due o più set di dati.
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
Importante!Differenza tra Oracle e Mysql:Diciamo che t1 t2 non hanno righe duplicate tra loro ma hanno righe duplicate individualmente.Esempio:t1 ha vendite dal 2017 e t2 dal 2018
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2
In ORACLE UNION ALL recupera tutte le righe da entrambe le tabelle.Lo stesso accadrà in MySQL.
Tuttavia:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
In ORACOLO, UNION recupera tutte le righe da entrambe le tabelle perché non esistono valori duplicati tra t1 e t2.D'altra parte dentro MySQL il set di risultati avrà meno righe perché ci saranno righe duplicate nella tabella t1 e anche nella tabella t2!
UNION rimuove i record duplicati mentre UNION ALL no.Ma è necessario controllare la maggior parte dei dati che verranno elaborati e la colonna e il tipo di dati devono essere gli stessi.
poiché l'unione utilizza internamente un comportamento "distinto" per selezionare le righe, è quindi più costosa in termini di tempo e prestazioni.Piace
select project_id from t_project
union
select project_id from t_project_contact
questo mi dà i record del 2020
d'altra parte
select project_id from t_project
union all
select project_id from t_project_contact
mi dà più di 17402 righe
sulla prospettiva della precedenza entrambi hanno la stessa precedenza.
Se non c'è ORDER BY
, UN UNION ALL
può riportare le righe indietro mentre procede, mentre a UNION
ti farebbe aspettare fino alla fine della query prima di fornirti l'intero set di risultati in una volta.Questo può fare la differenza in una situazione di time-out: a UNION ALL
mantiene viva la connessione, per così dire.
Quindi, se hai un problema di timeout e non c'è alcun ordinamento e i duplicati non sono un problema, UNION ALL
potrebbe essere piuttosto utile.
UNION e UNION ALL utilizzati per combinare due o più risultati della query.
Il comando UNION seleziona informazioni distinte e correlate da due tabelle che eliminano le righe duplicate.
D'altra parte, il comando UNION ALL seleziona tutti i valori da entrambe le tabelle, che visualizza tutte le righe.
L'unica differenza è:
"UNION" rimuove le righe duplicate.
"UNION ALL" non rimuove le righe duplicate.