Domanda

Qual è la differenza tra UNION E UNION ALL?

È stato utile?

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

  1. Dati della tabella dipendenti:

enter image description here

  1. Dati tabella clienti:

enter image description here

  1. Esempio UNION (Rimuove tutti i record duplicati):

enter image description here

  1. UNION ALL Esempio (Concatena semplicemente i record, non elimina i duplicati, quindi è più veloce di UNION):

enter image description here

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 UNIONs 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'

enter image description here

Di seguito sono riportati i risultati delle operazioni UNION ALL e UNION.

enter image description here

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:

enter image description here

(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.

È bene capirlo con un diagramma di Venn.

ecco il collegamento alla fonte.C'è una buona descrizione.

enter image description here

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))

enter image description here

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

enter image description here

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à

enter image description here

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

Produzione enter image description here

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

Unione Vs Unione Tutti con l'esempio

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top