Contenuti del Corso
SQL Intermedio
SQL Intermedio
Clausola Union
Abbiamo attirato l'attenzione di un cliente che ha bisogno di query SQL. Prima di immergerci nei JOINs
, impariamo a conoscere la clausola UNION
, che è essenziale per combinare più tabelle.
Ecco alcune cose importanti da sapere sull'uso di UNION
:
Numero e Ordine delle Colonne: Tutte le query combinate con
UNION
devono avere lo stesso numero di colonne nello stesso ordine;Tipi di Dati: Le colonne in ogni query devono avere tipi di dati compatibili;
Righe Uniche: Per impostazione predefinita,
UNION
rimuove le righe duplicate. UsaUNION ALL
se vuoi mantenere i duplicati.
Per una migliore comprensione di come combinare correttamente le tabelle utilizzando la clausola UNION
, ho introdotto una tabella aggiuntiva che contiene informazioni sui contractors
.
Non ci sono molte informazioni qui, solo il first_name
, last_name
e email
.
Puoi vedere che questa tabella ha somiglianze con la tabella employees
. Utilizzando la clausola UNION
, possiamo combinare queste due tabelle per, ad esempio, vedere un elenco di tutti i nomi e cognomi di dipendenti e contractors coinvolti nell'azienda.
Per fare ciò, useremo la clausola UNION
:
(SELECT employee_id as id, first_name, last_name FROM employees) UNION (SELECT contractor_id as id, first_name, last_name FROM contractors) ORDER BY id
Analizziamo cosa sta succedendo:
Abbiamo due query che restituiscono ciascuna tre colonne con gli stessi tipi di dati. Vogliamo vedere l'Id
, il first_name
e il last_name
di tutti nella compagnia. Abbiamo anche rinominato la colonna Id
in modo che entrambe le query abbiano gli stessi nomi di colonna.
Poi, usiamo UNION
per combinare i risultati di queste query, rimuovendo i duplicati (anche se qui non ce ne sono).
Infine, ordiniamo i risultati per Id
usando ORDER BY
.
Nota
Stiamo ordinando per
Id
, che è una colonna comune in entrambe le tabelle.
Dopo aver usato UNION
, otteniamo una "singola grande query" che possiamo ulteriormente manipolare con clausole come ORDER BY
.
Non possiamo usare direttamente WHERE
o GROUP BY
con tabelle combinate usando UNION
. Per applicare queste clausole, dobbiamo usare una sottoquery nella sezione FROM
. Ecco un esempio di come farlo:
SELECT id, first_name, last_name FROM ( SELECT employee_id AS id, first_name, last_name FROM employees UNION SELECT contractor_id AS id, first_name, last_name FROM contractors ) AS combined WHERE first_name = 'Jane'
Usare una sottoquery nella sezione FROM
ci dà più flessibilità! Potrebbe sembrare complicato all'inizio, ma padroneggiare questo renderà la scrittura di query complesse molto più facile.
1. Quali colonne sono richieste quando si utilizza la clausola UNION
in SQL?
2. Come tratta la clausola UNION
le righe duplicate per impostazione predefinita?
Grazie per i tuoi commenti!