Torna all'elenco degli articoli Articoli
Tempo di lettura: 5 minuti

UNION vs. UNION ALL in SQL: Qual è la differenza?

Differenze?

UNION e UNION ALL sono entrambe utilizzate per recuperare record da più tabelle. Questo articolo illustra le differenze tra i due metodi, consentendo di fare la scelta migliore per ogni singolo scenario.

È possibile utilizzare i comandi UNION e UNION ALL di SQL per ottenere dati da più tabelle del database. È un caso d'uso comune, considerando che la maggior parte dei database ha molte tabelle. Entrambi i comandi UNION e UNION ALL sono noti come operatori di insieme. In SQL, gli operatori set combinano i risultati di due o più query in un unico risultato. Per ulteriori informazioni sugli operatori di set, consultare questo articolo.

Nel confronto tra UNION e UNION ALL, c'è una differenza sostanziale:

  • UNION restituisce solo record unici
  • UNION ALL restituisce tutti i record, compresi i duplicati.

Se pensate di poter beneficiare di un corso ben strutturato e completo che copra le basi dell'SQL, prendete in considerazione questo corsoSQL Basics di LearnSQL.

UNION vs. UNION ALL: Sintassi

La sintassi di entrambe le varianti di UNION è molto simile. Esaminiamole singolarmente, iniziando da UNION.

Sintassi di UNION

Ricordate che UNION combina l'insieme dei risultati di due o più istruzioni SELECT, mostrando solo valori distinti.

La sintassi SQL qui sotto mostra una UNION che si verifica tra due tabelle diverse; le colonne in entrambe le istruzioni SELECT hanno lo stesso tipo di dati o tipi corrispondenti.

La clausola WHERE mostrata è un'inclusione opzionale:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

Sintassi SQL UNION ALL

Ricordate che UNION ALL combina i risultati di due o più istruzioni SELECT, mostrando tutti i valori, compresi gli eventuali duplicati.

La sintassi SQL riportata di seguito mostra un UNION ALL che avviene tra due tabelle diverse. Ancora una volta, le colonne in SELECT sono di tipo uguale o corrispondente e la clausola WHERE è opzionale:

	SELECT column_1, column_2
	FROM table_1
	[WHERE condition]

	UNION ALL

	SELECT column_1, column_2
	FROM table_2
	[WHERE condition]

SQL UNION e UNION ALL spiegati

Esistono diverse regole di utilizzo per UNION e UNION ALL. La mancata osservanza di queste regole provoca messaggi di errore:

  • Il numero di colonne utilizzate nella prima e nella seconda query deve essere lo stesso e i tipi di dati (ad esempio, INT, VARCHAR, ecc.) devono corrispondere.
  • I nomi delle colonne inclusi nelle due query possono essere diversi; in questo caso, il set di dati risultante mostrerà i nomi delle colonne della prima query.
  • Quando si usano gli alias SQL insieme a UNION e UNION ALL, è sufficiente includere l'alias nella prima query. L'inclusione nella seconda query non causerà errori, ma non avrà alcun impatto sul risultato.

È possibile utilizzare UNION e UNION ALL per combinare tabelle che non hanno colonne in comune. Questo caso d'uso è trattato in questo articolo su come unire tabelle senza una colonna in comune.

SQL UNION vs UNION ALL: Esempio

Vediamo un esempio pratico per comprendere meglio UNION e UNION ALL. Immaginiamo di avere un database con informazioni su diversi club. Ogni tabella mostra i membri del club e il luogo che frequentano. Ogni club può avere diverse filiali o sedi in cui si riunisce. La prima tabella è per il club book_club. Contiene il nome dei soci del club e il sito location che frequentano:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street

Allo stesso modo, la tabella rowing_club contiene il nome dei soci del club e il sito location che frequentano.

namelocation
MaryFair Street
SamanthaFair Street
PaulWest Street

Ora che abbiamo le nostre tabelle, scriviamo la nostra query SQL. Utilizzando la sintassi UNION, otteniamo la seguente query:

SELECT name, location 
FROM book_club

UNION

SELECT name, location 
FROM rowing_club

UNION esegue un'operazione di ordinamento ed elimina i record duplicati su tutte le colonne prima di restituire il set di dati combinato. Si può notare che utilizziamo colonne dello stesso tipo di dati e SELECT lo stesso numero di colonne in ogni query. Questo segue le regole dell'uso di UNION e dovrebbe essere eseguito senza errori.

L'esecuzione di questa query produce il seguente risultato:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
SamanthaFair Street

Ecco fatto! Tutti i membri di entrambi i club!

Ora modifichiamo la query e cambiamo UNION in UNION ALL:

SELECT name, location 
FROM book_club

UNION ALL

SELECT name, location 
FROM rowing_club

Con UNION ALL al suo posto, possiamo aspettarci che i risultati includano dei duplicati. Eseguiamo questa nuova query e osserviamo l'output:

namelocation
JohnFair Street
MaryFair Street
PaulWest Street
MaryFair Street
SamanthaFair Street
PaulWest Street

Riuscite a individuare tutti i record duplicati? Confrontate questo risultato con le due tabelle originali. Si può notare che ogni riga è stata inclusa.

UNION o UNION ALL: quale scegliere?

Ora che sapete come usare UNION e UNION ALL, vi starete chiedendo quale sia la soluzione migliore per la vostra situazione. Una cosa da considerare è che UNION rimuove i record duplicati, il che può influire sulle prestazioni della query.

Se ci si sta chiedendo quale variante utilizzare, ricordarsi che:

  • L'uso di UNION esegue effettivamente un SELECT DISTINCT sull'insieme dei risultati.
  • Se si sa che tutti i record restituiti da UNION saranno unici, utilizzare UNION ALL; sarà più veloce. Questo è particolarmente importante per gli insiemi di dati più grandi.

Scrivere query complesse con UNION e UNION ALL

Abbiamo analizzato le differenze tra UNION e UNION ALL e i motivi per cui si potrebbe scegliere l'uno o l'altro. Con queste informazioni, è ora possibile recuperare i dati da due o più tabelle del database. Sia UNION che UNION ALL giocano un ruolo importante nell'uso delle query ricorsive, un argomento più avanzato che viene trattato in dettaglio nel corsoRecursive Queries .

Non dimenticate di inserire tra i preferiti questa pagina, in modo da poter accedere facilmente alle spiegazioni e agli esempi di UNION e UNION ALL. Considerate anche di salvare questa pagina del nostro Ricettario SQL, che spiega come combinare i risultati di due query in SQL. Questa conoscenza può portare le vostre query SQL a un livello superiore, aiutandovi a gestire casi d'uso complessi con facilità!