Nel mondo SQL, la possibilità di combinare dati da più query è un requisito fondamentale, e SQL offre funzioni potenti come UNION e UNION ALL per farlo.
Come vedrai, capire le sottili differenze tra le funzioni UNION e UNION ALL in SQL è essenziale per interrogare e gestire i dati in modo efficiente. Questo tutorial spiega le principali somiglianze, differenze e casi d’uso utilizzando dataset di esempio per aiutarti a ottimizzare le tue query SQL.
La risposta breve: SQL UNION vs UNION ALL
La differenza chiave è che UNION rimuove i record duplicati, mentre UNION ALL include tutti i duplicati. Questa distinzione non solo cambia il numero di righe nel risultato della query, ma influisce anche sulle prestazioni.
Caratteristica
UNION
UNION ALL
Duplicati
Rimuove i record duplicati
Mantiene tutti i record (inclusi i duplicati)
Prestazioni
Più lento (deve ordinare/effettuare hash dei dati per trovare i duplicati)
Più veloce (si limita ad aggiungere i dati al risultato)
Operazione
Teoria degli insiemi (unione matematica)
Accodamento/stacking dei risultati
Consideriamo due tabelle di esempio, employees_2023 e employees_2024, che rappresentano i record dei dipendenti per due anni diversi.
Ora uniamo le due tabelle usando la funzione UNION.
SELECT employee_id, name, department FROM employees_2023
UNIONSELECT employee_id, name, department FROM employees_2024;Offerto da
employee_id
name
department
1
Alice
HR
2
Bob
IT
3
Charlie
Finance
4
David
Marketing
In questo risultato, i record duplicati vengono rimossi. Ora confrontiamolo con il risultato che otteniamo usando UNION ALL.
SELECT employee_id, name, department FROM employees_2023
UNIONALLSELECT employee_id, name, department FROM employees_2024;Offerto da
employee_id
name
department
1
Alive
HR
2
Bob
IT
3
Charlie
Finance
2
Bob
IT
3
Charlie
Finance
4
David
Marketing
In questo risultato, sono inclusi tutti i record e i duplicati non vengono rimossi.
Che cos’è UNION in SQL?
La funzione UNION combina i risultati di due o più query SELECT in un unico set di risultati, rimuovendo le righe duplicate. Ogni istruzione SELECT all’interno di UNION deve avere lo stesso numero di colonne. Inoltre, devono avere tipi di dati simili e le colonne devono essere nello stesso ordine. Per capire la funzione, creiamo due tabelle di esempio qui sotto.
Il codice sopra creerà le due tabelle che useremo in questo tutorial, rispettivamente sales_team e support_team. Puoi visualizzare le tabelle usando il codice seguente.
Record nella tabella support_team. Immagine dell’autore
Sono tabelle piccole con tre record ciascuna, e i nomi delle colonne sono autoesplicativi. Ora che abbiamo creato le due tabelle, applichiamo la funzione UNION.
SELECT employee_id, employee_name
FROM sales_team
UNIONSELECT employee_id, employee_name
FROM support_team;Offerto da
Output della funzione UNION. Immagine dell’autore
Si vede che la voce duplicata di employee_id, con valore 3, viene rimossa.
Quali sono i casi d’uso di UNION in SQL?
Ecco alcuni casi d’uso comuni della funzione UNION.
Combinare risultati da tabelle diverse: Quando vuoi unire dati da più tabelle assicurandoti di non avere record duplicati, UNION è la funzione di riferimento.
Gestire fonti dati diverse:UNION è utile quando combini tabelle provenienti da fonti differenti.
Rimuovere duplicati tra query: Quando vuoi garantire l’unicità del set di risultati combinato, usa UNION.
Che cos’è UNION ALL in SQL?
La funzione UNION ALL combina i risultati di due o più query SELECT, includendo tutte le righe duplicate. Questa funzione è più veloce di UNION perché non si preoccupa di rimuovere i duplicati.
SELECT employee_id, employee_name
FROM sales_team
UNIONALLSELECT employee_id, employee_name
FROM support_team;Offerto da
Output della funzione UNION ALL. Immagine dell’autore
In questo caso, le voci duplicate vengono ripetute e non rimosse.
Quali sono i casi d’uso di UNION ALL in SQL?
Ecco alcuni casi d’uso comuni della funzione UNION ALL.
Combinare risultati con duplicati: Usa UNION ALL quando devi unire risultati da più query e mantenere tutte le righe duplicate.
Considerazioni sulle prestazioni:UNION ALL è più efficiente in termini di tempo rispetto a UNION, perché non richiede il passaggio aggiuntivo di rimozione dei duplicati.
Aggregare dati di periodi diversi: Quando aggreghi dati di periodi o fonti differenti e devi preservare le voci duplicate, è preferibile UNION ALL.
Reportistica e analisi: Per report in cui è necessario ogni record, inclusi i duplicati, UNION ALL è adatto.
UNION e UNION ALL: somiglianze e differenze
Creiamo una tabella di riepilogo delle somiglianze e differenze.
Caratteristica
UNION
UNION ALL
Righe duplicate
Rimosse
Incluse
Prestazioni
Più lento
Più veloce
Caso d’uso
Quando ti servono record univoci
Quando ti servono tutti i record
Dimensione del risultato
Più piccola
Più grande
Differenze di sintassi tra UNION e UNION ALL nei diversi dialetti SQL
Sebbene la sintassi di base rimanga la stessa nei vari dialetti SQL, ci sono leggere variazioni a seconda della piattaforma. Osservando il codice, nella maggior parte delle piattaforme, come SQL Server, Oracle, MySQL, PostgreSQL o BigQuery, il codice sarà simile a quanto mostrato di seguito.
SELECT employee_id, employee_name
FROM sales_team
UNIONALLSELECT employee_id, employee_name
FROM support_team;Offerto da
I comandi di base in questi dialetti SQL restano gli stessi, con alcune sfumature e differenze:
Gestione di NULL e collations: I diversi dialetti SQL possono avere regole differenti per la gestione dei valori NULL e della collation delle stringhe.
Ottimizzazioni delle prestazioni: Le ottimizzazioni e l’efficienza di esecuzione possono variare.
Gestione degli errori e avvisi: I diversi dialetti possono gestire errori e avvisi in modo diverso quando si usano queste funzioni.
Funzioni e caratteristiche specifiche della piattaforma: Alcuni dialetti SQL possono offrire funzioni o caratteristiche aggiuntive da usare insieme a UNION e UNION ALL per scenari più complessi.
Il comando è significativamente diverso nel caso di PySpark, che opera in un ambiente distribuito. Il codice è riportato di seguito, assumendo che df1 e df2 siano i nomi dei due DataFrame contenenti le due tabelle create sopra:
Sebbene UNION e UNION ALL siano potenti, sono rigide in termini di sintassi. Se la tua query restituisce un errore, probabilmente sta violando una di queste tre regole d’oro.
1. Conteggio delle colonne non corrispondente
L’errore più comune è una mancata corrispondenza nel numero di colonne. Per combinare due dataset, la “forma” delle tabelle deve essere identica. Non puoi impilare una tabella con 3 colonne sopra una tabella con 2 colonne.
L’errore:
-- This will fail because the column counts do not matchSELECT employee_id, name, department
FROM employees_2023
UNIONSELECT employee_id, name
FROM employees_2024;Offerto da
La soluzione: Assicurati che entrambe le istruzioni SELECT richiedano esattamente lo stesso numero di colonne. Se nella seconda tabella manca un dato (come department), puoi selezionare NULL come segnaposto per far combaciare i conteggi:
SELECT employee_id, name, department FROM employees_2023
UNIONSELECT employee_id, name,NULLas department FROM employees_2024;Offerto da
2. Compatibilità dei tipi di dato
SQL combina i risultati in base alla posizione, non al nome della colonna. Il tipo di dato della prima colonna nella prima query deve corrispondere (o essere compatibile) con il tipo di dato della prima colonna nella seconda query.
L’errore: Se inverti accidentalmente l’ordine delle colonne, SQL prova a impilare un numero (ID) sopra una stringa (Nome), causando un errore di conversione del tipo di dato.
-- This fails because Column 1 (ID - INT) cannot combine with Column 1 (Name - VARCHAR)SELECT employee_id, name FROM employees_2023
UNIONSELECT name, employee_id FROM employees_2024;Offerto da
La soluzione: Verifica sempre che le colonne siano elencate nello stesso identico ordine in ogni istruzione SELECT all’interno della UNION.
3. Limitazioni di ORDER BY
Un punto di confusione frequente è dove posizionare la clausola ORDER BY. Non puoi ordinare le singole sottoquery all’interno di un’operazione di UNION; puoi ordinare solo il risultato finale combinato.
L’errore: Usare ORDER BY prima della query finale genererà un errore di sintassi.
-- INCORRECT SYNTAXSELECT employee_id, name FROM employees_2023
ORDERBY employee_id -- You cannot sort here!UNIONSELECT employee_id, name FROM employees_2024;Offerto da
La soluzione: Inserisci la clausola ORDER BY alla fine della query. In questo modo l’ordinamento si applica all’intero set di risultati combinato.
-- CORRECT SYNTAXSELECT employee_id, name FROM employees_2023
UNIONSELECT employee_id, name FROM employees_2024
ORDERBY employee_id;-- Sorts the final resultOfferto da
Considerazioni finali
È fondamentale comprendere quando applicare UNION rispetto a UNION ALL per gestire i dati in modo efficiente con SQL. Mentre UNION seleziona solo i record distinti, UNION ALL li seleziona tutti, influenzando prestazioni e dimensione del set di risultati. Usa queste conoscenze per scegliere la funzione più adatta alle tue esigenze specifiche.
Per approfondire, valuta le seguenti risorse:
Introduzione a SQL: Impara a creare e interrogare database relazionali usando SQL.
Fondamenti di SQL: Acquisisci le competenze SQL di base per interagire con i tuoi dati e interrogarli.
Certificazione SQL Associate: Dimostra le tue capacità SQL estraendo i dati appropriati da un database e usandoli per rispondere a domande comuni sui dati.
SQL intermedio: Con questo corso pratico imparerai tutto ciò che ti serve per analizzare i dati usando il tuo codice SQL, già da oggi.
Professionista esperto in data science, intelligenza artificiale, analytics e strategia dei dati.
Domande frequenti
Qual è la differenza principale tra SQL UNION e UNION ALL?⌄
UNION rimuove i record duplicati, mentre UNION ALL include tutti i duplicati.
C’è una differenza di prestazioni tra UNION e UNION ALL?⌄
Sì, in genere UNION è più lento perché rimuove i duplicati.
Ci sono casi d’uso specifici in cui UNION ALL è preferibile a UNION?⌄
UNION ALL è preferibile quando ti servono tutti i record, inclusi i duplicati, ad esempio per reportistica e analisi.
Quando dovrei usare SQL UNION invece di UNION ALL?⌄
Usa UNION quando ti serve un set di risultati combinato senza duplicati.
In che modo i diversi dialetti SQL influiscono sull’uso di UNION e UNION ALL?⌄
Anche se la sintassi di base è coerente, potrebbero esserci leggere variazioni nelle prestazioni, nella gestione dei NULL e nella collation tra i diversi dialetti SQL.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Nel mondo SQL, la possibilità di combinare dati da più query è un requisito fondamentale, e SQL offre funzioni potenti come
UNIONeUNION ALLper farlo.Come vedrai, capire le sottili differenze tra le funzioni
UNIONeUNION ALLin SQL è essenziale per interrogare e gestire i dati in modo efficiente. Questo tutorial spiega le principali somiglianze, differenze e casi d’uso utilizzando dataset di esempio per aiutarti a ottimizzare le tue query SQL.La risposta breve: SQL UNION vs UNION ALL
La differenza chiave è che
UNIONrimuove i record duplicati, mentreUNION ALLinclude tutti i duplicati. Questa distinzione non solo cambia il numero di righe nel risultato della query, ma influisce anche sulle prestazioni.Consideriamo due tabelle di esempio,
employees_2023eemployees_2024, che rappresentano i record dei dipendenti per due anni diversi.employee_id
name
department
1
Alice
HR
2
Bob
IT
3
Charlie
Finance
employee_id
name
department
2
Bob
IT
3
Charlie
Finance
4
David
Marketing
Ora uniamo le due tabelle usando la funzione
UNION.employee_id
name
department
1
Alice
HR
2
Bob
IT
3
Charlie
Finance
4
David
Marketing
In questo risultato, i record duplicati vengono rimossi. Ora confrontiamolo con il risultato che otteniamo usando
UNION ALL.employee_id
name
department
1
Alive
HR
2
Bob
IT
3
Charlie
Finance
2
Bob
IT
3
Charlie
Finance
4
David
Marketing
In questo risultato, sono inclusi tutti i record e i duplicati non vengono rimossi.
Che cos’è UNION in SQL?
La funzione
UNIONcombina i risultati di due o più querySELECTin un unico set di risultati, rimuovendo le righe duplicate. Ogni istruzioneSELECTall’interno diUNIONdeve avere lo stesso numero di colonne. Inoltre, devono avere tipi di dati simili e le colonne devono essere nello stesso ordine. Per capire la funzione, creiamo due tabelle di esempio qui sotto.Il codice sopra creerà le due tabelle che useremo in questo tutorial, rispettivamente
sales_teamesupport_team. Puoi visualizzare le tabelle usando il codice seguente.Record nella tabella sales_team. Immagine dell’autore
Record nella tabella support_team. Immagine dell’autore
Sono tabelle piccole con tre record ciascuna, e i nomi delle colonne sono autoesplicativi. Ora che abbiamo creato le due tabelle, applichiamo la funzione
UNION.Output della funzione UNION. Immagine dell’autore
Si vede che la voce duplicata di
employee_id, con valore3, viene rimossa.Quali sono i casi d’uso di UNION in SQL?
Ecco alcuni casi d’uso comuni della funzione
UNION.Combinare risultati da tabelle diverse: Quando vuoi unire dati da più tabelle assicurandoti di non avere record duplicati,
UNIONè la funzione di riferimento.Gestire fonti dati diverse:
UNIONè utile quando combini tabelle provenienti da fonti differenti.Rimuovere duplicati tra query: Quando vuoi garantire l’unicità del set di risultati combinato, usa
UNION.Che cos’è UNION ALL in SQL?
La funzione
UNION ALLcombina i risultati di due o più querySELECT, includendo tutte le righe duplicate. Questa funzione è più veloce diUNIONperché non si preoccupa di rimuovere i duplicati.Output della funzione UNION ALL. Immagine dell’autore
In questo caso, le voci duplicate vengono ripetute e non rimosse.
Quali sono i casi d’uso di UNION ALL in SQL?
Ecco alcuni casi d’uso comuni della funzione
UNION ALL.UNION ALLquando devi unire risultati da più query e mantenere tutte le righe duplicate.UNION ALLè più efficiente in termini di tempo rispetto aUNION, perché non richiede il passaggio aggiuntivo di rimozione dei duplicati.UNION ALL.UNION ALLè adatto.UNION e UNION ALL: somiglianze e differenze
Creiamo una tabella di riepilogo delle somiglianze e differenze.
Caratteristica
UNION
UNION ALL
Righe duplicate
Rimosse
Incluse
Prestazioni
Più lento
Più veloce
Caso d’uso
Quando ti servono record univoci
Quando ti servono tutti i record
Dimensione del risultato
Più piccola
Più grande
Differenze di sintassi tra UNION e UNION ALL nei diversi dialetti SQL
Sebbene la sintassi di base rimanga la stessa nei vari dialetti SQL, ci sono leggere variazioni a seconda della piattaforma. Osservando il codice, nella maggior parte delle piattaforme, come SQL Server, Oracle, MySQL, PostgreSQL o BigQuery, il codice sarà simile a quanto mostrato di seguito.
I comandi di base in questi dialetti SQL restano gli stessi, con alcune sfumature e differenze:
NULLe della collation delle stringhe.UNIONeUNION ALLper scenari più complessi.Il comando è significativamente diverso nel caso di PySpark, che opera in un ambiente distribuito. Il codice è riportato di seguito, assumendo che
df1edf2siano i nomi dei due DataFrame contenenti le due tabelle create sopra:3 regole ed errori comuni quando si usa SQL UNION
Sebbene
UNIONeUNION ALLsiano potenti, sono rigide in termini di sintassi. Se la tua query restituisce un errore, probabilmente sta violando una di queste tre regole d’oro.1. Conteggio delle colonne non corrispondente
L’errore più comune è una mancata corrispondenza nel numero di colonne. Per combinare due dataset, la “forma” delle tabelle deve essere identica. Non puoi impilare una tabella con 3 colonne sopra una tabella con 2 colonne.
L’errore:
La soluzione: Assicurati che entrambe le istruzioni
SELECTrichiedano esattamente lo stesso numero di colonne. Se nella seconda tabella manca un dato (comedepartment), puoi selezionareNULLcome segnaposto per far combaciare i conteggi:2. Compatibilità dei tipi di dato
SQL combina i risultati in base alla posizione, non al nome della colonna. Il tipo di dato della prima colonna nella prima query deve corrispondere (o essere compatibile) con il tipo di dato della prima colonna nella seconda query.
L’errore: Se inverti accidentalmente l’ordine delle colonne, SQL prova a impilare un numero (ID) sopra una stringa (Nome), causando un errore di conversione del tipo di dato.
La soluzione: Verifica sempre che le colonne siano elencate nello stesso identico ordine in ogni istruzione
SELECTall’interno dellaUNION.3. Limitazioni di ORDER BY
Un punto di confusione frequente è dove posizionare la clausola
ORDER BY. Non puoi ordinare le singole sottoquery all’interno di un’operazione diUNION; puoi ordinare solo il risultato finale combinato.L’errore: Usare
ORDER BYprima della query finale genererà un errore di sintassi.La soluzione: Inserisci la clausola
ORDER BYalla fine della query. In questo modo l’ordinamento si applica all’intero set di risultati combinato.Considerazioni finali
È fondamentale comprendere quando applicare
UNIONrispetto aUNION ALLper gestire i dati in modo efficiente con SQL. MentreUNIONseleziona solo i record distinti,UNION ALLli seleziona tutti, influenzando prestazioni e dimensione del set di risultati. Usa queste conoscenze per scegliere la funzione più adatta alle tue esigenze specifiche.Per approfondire, valuta le seguenti risorse: