Spiegazione e esempi pratici della combinazione di query usando UNION in SQL

L’operatore UNION di SQL è uno strumento potente utilizzato per combinare i risultati di più query SELECT in un unico set di risultati. Unendo i dati ottenuti da tabelle diverse o da condizioni diverse sulla stessa tabella, semplifica l’analisi dei dati complessi e la creazione di report. In questo articolo, esploreremo l’uso di base di UNION, le differenze tra UNION e UNION ALL, esempi pratici specifici e le migliori pratiche da seguire quando si utilizza.

Indice

Uso di base di UNION

L’operatore UNION viene utilizzato per combinare i set di risultati di due o più query SELECT. La sintassi di base è la seguente:

SELECT colonna1, colonna2, ...
FROM tabella1
UNION
SELECT colonna1, colonna2, ...
FROM tabella2;

Punti da considerare durante l’uso

Quando si utilizza UNION, è importante tenere a mente i seguenti punti:

  • Il numero di colonne e i tipi di dati delle query SELECT devono corrispondere.
  • I nomi delle colonne non devono necessariamente corrispondere, ma i tipi di dati devono essere gli stessi.
  • Per impostazione predefinita, UNION elimina le righe duplicate. Se si desidera mantenere i duplicati, utilizzare UNION ALL.

Differenze tra UNION e UNION ALL

In SQL, ci sono due operatori: UNION e UNION ALL. Entrambi combinano i risultati di più query SELECT, ma ci sono alcune differenze importanti tra loro.

UNION

L’operatore UNION rimuove le righe duplicate e restituisce un set di risultati univoco. Questo significa che se ci sono righe duplicate nei set di risultati combinati, queste verranno contate come una sola riga.

SELECT colonna1, colonna2, ...
FROM tabella1
UNION
SELECT colonna1, colonna2, ...
FROM tabella2;

UNION ALL

L’operatore UNION ALL restituisce tutte le righe, comprese quelle duplicate. Poiché le righe duplicate sono incluse nel set di risultati, le prestazioni possono essere migliori rispetto a UNION.

SELECT colonna1, colonna2, ...
FROM tabella1
UNION ALL
SELECT colonna1, colonna2, ...
FROM tabella2;

Confronto tra esempi d’uso

Vediamo la differenza tra UNION e UNION ALL usando i seguenti esempi di tabelle.

Tabella 1:

idnome
1Taro
2Hanako

Tabella 2:

idnome
2Hanako
3Jiro
SELECT id, nome
FROM tabella1
UNION
SELECT id, nome
FROM tabella2;

Risultato di questa query:

idnome
1Taro
2Hanako
3Jiro
SELECT id, nome
FROM tabella1
UNION ALL
SELECT id, nome
FROM tabella2;

Risultato di questa query:

idnome
1Taro
2Hanako
2Hanako
3Jiro

L’uso di UNION è efficace quando si desidera evitare la duplicazione dei dati. UNION ALL è adatto quando si desidera ottenere tutti i dati, compresi quelli duplicati, o quando si privilegiano le prestazioni.

Esempio pratico 1: Combinazione di dati da tabelle diverse

Vediamo un esempio di utilizzo dell’operatore UNION per combinare i dati da tabelle diverse. Qui, estrarremo i nomi e i contatti dalle tabelle dipendenti e clienti per creare un elenco di tutte le persone.

Tabella dipendenti (employees)

employee_idnomeemail
1Taro Yamadayamada@example.com
2Hanako Satosato@example.com

Tabella clienti (customers)

customer_idnomeemail
1Jiro Suzukisuzuki@example.com
2Ichiro Tanakatanaka@example.com

La query per unire tutti i nomi e gli indirizzi email in un unico elenco da queste tabelle è la seguente:

SELECT name, email
FROM employees
UNION
SELECT name, email
FROM customers;

Risultato della query

Il risultato di questa query è il seguente:

nomeemail
Taro Yamadayamada@example.com
Hanako Satosato@example.com
Jiro Suzukisuzuki@example.com
Ichiro Tanakatanaka@example.com

Come si può vedere da questo risultato, i nomi e gli indirizzi email dei dipendenti e dei clienti sono stati uniti in un unico elenco. L’uso di UNION consente di combinare facilmente i dati provenienti da tabelle diverse.

Esempio pratico 2: Combinazione di dati condizionali all’interno della stessa tabella

Vediamo un esempio di utilizzo di UNION per combinare dati basati su condizioni diverse all’interno della stessa tabella. In questo caso, combineremo le vendite di un determinato mese con tutte le vendite effettuate in tutto il periodo, partendo dalla tabella delle vendite.

Tabella delle vendite (sales)

sale_idprodottodata_venditaimporto
1Prodotto A2024-01-155000
2Prodotto B2024-02-203000
3Prodotto C2024-01-107000
4Prodotto D2024-03-052000

La query per combinare le vendite di gennaio 2024 con tutte le vendite effettuate in tutto il periodo è la seguente:

SELECT product, amount, 'Gennaio 2024' AS periodo
FROM sales
WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31'
UNION
SELECT product, amount, 'Tutto il periodo' AS periodo
FROM sales;

Risultato della query

Il risultato di questa query è il seguente:

prodottoimportoperiodo
Prodotto A5000Gennaio 2024
Prodotto C7000Gennaio 2024
Prodotto A5000Tutto il periodo
Prodotto B3000Tutto il periodo
Prodotto C7000Tutto il periodo
Prodotto D2000Tutto il periodo

Come si può vedere da questo risultato, combinando i dati basati su condizioni diverse all’interno della stessa tabella, è possibile visualizzare simultaneamente le vendite di un periodo specifico e quelle di tutto il periodo. In questo modo, l’uso di UNION facilita la combinazione di dati basati su condizioni complesse.

Migliori pratiche per l’uso di UNION

Di seguito sono riportate le migliori pratiche per utilizzare efficacemente l’operatore UNION. Seguire queste linee guida può migliorare le prestazioni delle query e mantenerle leggibili.

Considerare le prestazioni

UNION elimina le righe duplicate per impostazione predefinita, il che richiede un’elaborazione aggiuntiva e può influire sulle prestazioni. Se non è un problema mantenere le righe duplicate, l’uso di UNION ALL può migliorare le prestazioni.

SELECT colonna1, colonna2, ...
FROM tabella1
UNION ALL
SELECT colonna1, colonna2, ...
FROM tabella2;

Verificare la corrispondenza dei tipi di dati

Quando si utilizza UNION, il numero di colonne e i tipi di dati delle query SELECT devono corrispondere. Se si tenta di combinare tipi di dati diversi, si verificherà un errore. Verificare che i tipi di dati delle colonne siano coerenti prima di eseguire la query.

Selezionare solo le colonne necessarie

Per migliorare le prestazioni e la leggibilità della query, selezionare solo le colonne necessarie. Includere colonne non necessarie può rendere il set di risultati più complesso e aumentare il tempo di elaborazione.

SELECT colonna1, colonna2
FROM tabella1
UNION
SELECT colonna1, colonna2
FROM tabella2;

Utilizzare indici appropriati

Per ottimizzare le prestazioni delle query UNION, è importante configurare indici appropriati. L’uso di indici permette al database di gestire le query combinate in modo più efficiente.

Considerare l’ordine delle query

In una query UNION, posizionare la query che può filtrare più dati per prima può migliorare le prestazioni complessive. Filtrando il maggior numero possibile di dati nella prima query, si riduce il carico delle query successive.

Seguendo queste migliori pratiche, è possibile migliorare le prestazioni e la leggibilità delle query utilizzando l’operatore UNION.

Conclusione

L’operatore UNION è uno strumento potente per combinare i risultati di più query SELECT e ottenere un unico set di risultati. Capire le differenze tra UNION e UNION ALL e usarli correttamente consente di integrare i dati in modo efficiente.

In questo articolo, abbiamo spiegato l’uso di base e fornito esempi pratici. Abbiamo anche illustrato le migliori pratiche da seguire per considerare le prestazioni e mantenere la leggibilità. Utilizzando queste conoscenze, è possibile migliorare l’efficienza delle query nel database e facilitare l’esecuzione di analisi dei dati complesse.

Sfruttando efficacemente UNION, sarà possibile risolvere agevolmente le sfide legate all’integrazione dei dati e ottenere operazioni di database più potenti.

Indice