Risposte:
UNIONrimuove i record duplicati (dove tutte le colonne nei risultati sono uguali), UNION ALLno.
Si verifica un aumento delle prestazioni quando si utilizza UNIONinvece di UNION ALL, poiché il server di database deve fare un lavoro aggiuntivo per rimuovere le righe duplicate, ma di solito non si desidera i duplicati (specialmente durante lo sviluppo di report).
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Risultato:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Risultato:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Sia UNION che UNION ALL concatenano il risultato di due diversi SQL. Differiscono nel modo in cui gestiscono i duplicati.
UNION esegue un DISTINCT sul set di risultati, eliminando le righe duplicate.
UNION ALL non rimuove i duplicati, 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) Dipendente e 2) Cliente




UNIONrimuove i duplicati, mentre UNION ALLnon lo fa.
Per rimuovere i duplicati, è necessario ordinare il set di risultati e ciò potrebbe avere un impatto sulle prestazioni di UNION, a seconda del volume di dati da ordinare e delle impostazioni di vari parametri RDBMS (per Oracle PGA_AGGREGATE_TARGETcon WORKAREA_SIZE_POLICY=AUTOo SORT_AREA_SIZEe SOR_AREA_RETAINED_SIZEse WORKAREA_SIZE_POLICY=MANUAL).
Fondamentalmente, l'ordinamento è più veloce se può essere eseguito in memoria, ma si applica lo stesso avvertimento sul volume di dati.
Naturalmente, se è necessario restituire i dati senza duplicati, è necessario utilizzare UNION, a seconda della fonte dei dati.
Avrei commentato il primo post per qualificare il commento "è molto meno performante", ma ho una reputazione insufficiente (punti) per farlo.
In ORACLE: UNION non supporta i tipi di colonna BLOB (o CLOB), UNION ALL lo supporta.
La differenza di base tra UNION e UNION ALL è che l'operazione di unione elimina le righe duplicate dal set di risultati ma l'unione di tutte restituisce tutte le righe dopo l'unione.
da http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
Puoi evitare duplicati e continuare a correre molto più velocemente di UNION DISTINCT (che in realtà è lo stesso di 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 la AND a!=Xparte. Questo è molto più veloce di UNION.
UNION- UNIONrimuove anche i duplicati restituiti dalle sottoquery, mentre il tuo approccio non lo farà.
Solo per aggiungere i miei due centesimi alla discussione qui: si potrebbe capire l' UNIONoperatore come un UNIONE pura e orientata al SET - ad es. Set A = {2,4,6,8}, set B = {1,2,3,4 }, A UNION B = {1,2,3,4,6,8}
Quando si hanno a che fare con insiemi, non si desidera che i numeri 2 e 4 compaiano due volte, in quanto un elemento è o non è in un insieme.
Nel mondo di SQL, tuttavia, potresti voler vedere tutti gli elementi dei due set insieme in un "sacchetto" {2,4,6,8,1,2,3,4}. E a questo scopo T-SQL offre all'operatore UNION ALL.
UNION ALLnon è "offerto" da T-SQL. UNION ALLfa parte dello standard ANSI SQL e non è specifico per MS SQL Server.
UNIONE
Il UNIONcomando viene utilizzato per selezionare le informazioni correlate da due tabelle, proprio come il JOINcomando. Tuttavia, quando si utilizza il UNIONcomando, tutte le colonne selezionate devono essere dello stesso tipo di dati. Con UNION, vengono selezionati solo valori distinti.
UNION ALL
Il UNION ALLcomando è uguale al UNIONcomando, tranne quelloUNION ALL seleziona tutti i valori.
La differenza tra Unione Union allè quellaUnion all non eliminerà le righe duplicate, invece estrae tutte le righe da tutte le tabelle adattandole alle specifiche della query e le combina in una tabella.
Una UNIONdichiarazione fa effettivamente una SELECT DISTINCTserie di risultati. Se sai che tutti i record restituiti sono univoci dal tuo sindacato, utilizza UNION ALLinvece i risultati più rapidi.
Non sono sicuro che sia importante quale database
UNIONe UNION ALLdovrebbe funzionare su tutti i server SQL.
Evitare inutili UNIONs sono enormi perdite di prestazioni. Come regola pratica, utilizzare UNION ALLse non si è sicuri di quale utilizzare.
UNION - genera record distinti
mentre
UNION ALL - genera tutti i record inclusi i duplicati.
Entrambi sono operatori di blocco e quindi personalmente preferisco usare JOINS su Blocking Operators (UNION, INTERSECT, UNION ALL ecc.) In qualsiasi momento.
Per illustrare perché l'operazione dell'Unione ha prestazioni scarse rispetto a Union All, controlla 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 unici dal tuo sindacato, usa UNION ALL, invece, darà risultati più veloci.
L'uso di UNION comporta operazioni di ordinamento distinto nel piano di esecuzione. La prova per provare questa affermazione è mostrata di seguito:
UNION/ UNION ALL).
uniondell'utilizzo di una combinazione di joins e alcune s davvero brutte case, ma rende la query dannatamente quasi impossibile da leggere e mantenere, e nella mia esperienza è anche terribile per le prestazioni. Confronto: select foo.bar from foo union select fizz.buzz from fizzcontroselect 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
unione viene utilizzata per selezionare valori distinti da due tabelle in cui come unione tutto viene utilizzato per selezionare tutti i valori inclusi i duplicati dalle tabelle
()mostrata una seconda volta. In realtà, ripensandoci, poiché il union allrisultato non è un insieme, non dovresti cercare di disegnarlo usando un diagramma di Venn!
(Dal libro online di Microsoft SQL Server)
UNIONE [TUTTO]
Specifica che più set di risultati devono essere combinati e restituiti come un singolo set di risultati.
TUTTI
Incorpora tutte le righe nei risultati. Questo include duplicati. Se non specificato, le righe duplicate vengono rimosse.
UNIONimpiegherà troppo tempo quando una riga duplicata che trova like DISTINCTviene applicata ai 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
DISTINCTsui risultati è un'operazione di ordinamento sui risultati.
UNION ALLi risultati verranno mostrati come ordine arbitrario sui risultati, ma i UNIONrisultati verranno mostrati come ORDER BY 1, 2, 3, ..., n (n = column number of Tables)applicati ai risultati. Puoi vedere questo effetto collaterale quando non hai righe duplicate.
Aggiungo un esempio,
UNION , si sta unendo a distinto -> più lento, perché deve essere confrontato (nello sviluppatore Oracle SQL, scegli query, premi F10 per visualizzare l'analisi dei costi).
UNION ALL , si sta fondendo senza distinti -> più veloci.
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.
La differenza tra UNIONe UNION ALLè che UNION willomette i record duplicati mentre UNION ALLincluderà i record duplicati.
UnionIl set di risultati è ordinato in ordine crescente, mentre il UNION ALLset di risultati non è ordinato
UNIONesegue un DISTINCTrelativo set di risultati in modo da eliminare eventuali righe duplicate. Considerando UNION ALLche non rimuoverà i duplicati e quindi è più veloce di UNION. *
Nota : le prestazioni di UNION ALLsaranno in genere migliori di UNION, poiché UNIONrichiede al server di svolgere il lavoro aggiuntivo di rimozione di duplicati. Quindi, nei casi in cui è certo che non ci saranno duplicati o in cui i duplicati non sono un problema, UNION ALLsi consiglia l' uso di per motivi di prestazioni.
ORDER BY, i risultati ordinati non sono garantiti. Forse hai in mente un particolare fornitore SQL (anche allora, in ordine crescente cosa esattamente ...?) Ma questa domanda non ha tag fornitore = specifici.
Supponi di avere un insegnante e uno studente a due tavoli
Entrambi hanno 4 colonne con un 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)
È possibile applicare UNION o UNION ALL per quelle due tabelle che hanno lo stesso numero di colonne. Ma hanno nome o tipo di dati diversi.
Quando si applica l' UNIONoperazione su 2 tabelle, trascura tutte le voci duplicate (il valore di tutte le colonne della riga in una tabella è uguale a un'altra tabella). Come questo
SELECT * FROM Student
UNION
SELECT * FROM Teacher
il risultato sarà
Quando si applica l' UNION ALLoperazione su 2 tabelle, restituisce tutte le voci con duplicato (se esiste una differenza tra qualsiasi valore di colonna di una riga in 2 tabelle). Come questo
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
Prestazione:
Ovviamente UNION TUTTE le prestazioni sono migliori di UNION poiché svolgono attività aggiuntive per rimuovere i valori duplicati. Puoi verificarlo da Tempo stimato di esecuzione premendo ctrl + L su MSSQL
UNIONper comunicare l'intento (cioè senza duplicati) perché UNION ALLè improbabile che tu possa ottenere in termini assoluti qualsiasi miglioramento delle prestazioni della vita reale.
In parole molto semplici, la differenza tra UNION e UNION ALL è che UNION ometterà i record duplicati mentre UNION ALL includerà record duplicati.
Un'altra cosa che vorrei aggiungere-
Unione : - Il set di risultati è ordinato in ordine crescente.
Union All : - Il set di risultati non è ordinato. l'output di due query viene appena aggiunto.
UNIONsarà NON sorta il risultato in ordine crescente. Qualsiasi ordinamento che vedi in un risultato senza usare order byè una pura coincidenza. Il DBMS è libero di utilizzare qualsiasi strategia che ritenga efficace per rimuovere i duplicati. Questo potrebbe essere l'ordinamento, ma potrebbe anche essere un algoritmo di hashing o qualcosa di completamente diverso - e la strategia cambierà con il numero di righe. A unionche appare ordinato con 100 righe potrebbe non essere con 100.000 righe
ORDER BYclausola appropriata .
Differenza tra Union Vs Union TUTTO in mq
Cos'è Union 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 ha righe duplicate tra loro ma hanno righe duplicate individuali. 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.
Però:
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
In ORACLE , UNION recupera tutte le righe da entrambe le tabelle perché non ci sono valori duplicati tra t1 e t2. D'altra parte in 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 invece UNION ALL no. Ma è necessario controllare la maggior parte dei dati che verranno elaborati e la colonna e il tipo di dati devono essere uguali.
poiché l'unione utilizza internamente un comportamento "distinto" per selezionare le righe, quindi è più costoso in termini di tempo e prestazioni. piace
select project_id from t_project
union
select project_id from t_project_contact
questo mi dà record per il 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
in prospettiva di precedenza entrambi hanno la stessa precedenza.
In caso contrario ORDER BY, a UNION ALLpuò riportare le righe mentre procede, mentre a UNIONti farebbe attendere fino alla fine della query prima di fornirti l'intero set di risultati in una sola volta. Ciò può fare la differenza in una situazione di timeout: aUNION ALL mantiene viva la connessione, per così dire.
Quindi, se hai un problema di timeout e non c'è ordinamento e i duplicati non sono un problema, UNION ALLpuò essere piuttosto utile.
UNION e UNION ALL sono stati utilizzati per combinare due o più risultati della query.
Il comando UNION seleziona informazioni distinte e correlate da due tabelle che elimineranno le righe duplicate.
D'altra parte, il comando UNION ALL seleziona tutti i valori da entrambe le tabelle, che visualizza tutte le righe.
Come abitudine, utilizzare sempre UNION ALL . Utilizzare solo UNION in casi speciali quando è necessario eliminare i duplicati che possono essere estremamente disordinati e si può leggere tutto negli altri commenti qui.
UNION ALLfunziona anche su più tipi di dati. Ad esempio, quando si tenta di unire tipi di dati spaziali. Per esempio:
select a.SHAPE from tableA a
union
select b.SHAPE from tableB b
getterà
The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.
Tuttavia union allnon lo farà.
L'unica differenza è:
"UNION" rimuove le righe duplicate.
"UNION ALL" non rimuove le righe duplicate.