Problema:
Ti piacerebbe visualizzare i dati di determinate colonne (di un tipo di dati simile) da due tabelle in SQL.
Esempio:
Ci sono due tabelle nel nostro database:employee
e customer
.
Il employee
la tabella contiene i dati nelle seguenti colonne:id , nome , cognome e età .
id | nome | cognome | età |
---|---|---|---|
1 | Tom | Mugnaio | 22 |
2 | Giovanni | Smith | 26 |
3 | Lisa | Williams | 30 |
4 | Carlo | Davis | 21 |
5 | Giacomo | More | 22 |
Il customer
la tabella contiene i dati nelle seguenti colonne:id , nome , cognome e età .
id | nome | cognome | età |
---|---|---|---|
1 | Milano | Smith | 45 |
2 | Carlo | Davis | 21 |
3 | Segna | Sostenitore | 19 |
In un set di risultati, mostriamo il nome, il cognome e l'età di tutte le persone nel database, sia dipendenti che clienti.
Soluzione 1:
Useremo UNION ALL
per unire i dati dalle colonne in due tabelle.
Ecco la domanda che scriveresti:
SELECT first_name, last_name, age FROM employee UNION ALL SELECT first_name, last_name, age FROM customer;
Ecco il risultato:
first_name | cognome | età |
---|---|---|
Tom | Mugnaio | 22 |
Giovanni | Fabio | 26 |
Lisa | Williams | 30 |
Charles | Davis | 21 |
Giacomo | More | 28 |
Milano | Fabio | 45 |
Charles | Davis | 21 |
Segna | Sostenitore | 19 |
Discussione:
Utilizzare la clausola UNION ALL per unire i dati dalle colonne in due o più tabelle. Nel nostro esempio, uniamo i dati del employee
e customer
tavoli. A sinistra della parola chiave UNION ALL, inserisci la prima istruzione SELECT per ottenere i dati dalla prima tabella (nel nostro esempio, la tabella employee
). A destra, usa un'altra istruzione SELECT per ottenere i dati dalla seconda tabella (nel nostro esempio, customer
).
Ricorda che i dati selezionati in entrambe le tabelle devono essere dello stesso tipo di dati in ogni colonna. Ad esempio, se la prima colonna nel primo SELECT è un tipo di dati stringa, anche la prima colonna nel secondo SELECT deve essere un tipo di dati stringa. Se la seconda colonna nella prima istruzione SELECT è un numero intero, anche la seconda colonna nella seconda tabella deve essere di tipo intero.
Nella prima query, abbiamo selezionato l'età (l'età del dipendente, che è un tipo di dati intero) per la terza colonna. Pertanto, anche la terza colonna nel secondo SELECT è un valore intero; è l'età del cliente.
Le seconde colonne in entrambe le istruzioni SELECT sono dello stesso tipo di dati. Tuttavia, se i valori sono gli stessi in entrambe le tabelle, verranno visualizzati più volte; ad esempio, "Charles Davis 21" viene mostrato due volte nel set di risultati.
E se non si desiderassero più record identici nella tabella dei risultati? In questo caso, usa UNION
. È simile a UNION ALL
, ma rimuove i record duplicati. Guarda il seguente esempio.
Soluzione 2:
Ecco la query che evita i record duplicati:
SELECT first_name, last_name FROM employee UNION SELECT first_name, last_name FROM customer;
Ecco il risultato della query precedente:
first_name | cognome |
---|---|
Marco | Sostenitore |
Giacomo | More |
Giovanni | Smith |
Carlo | Davis |
Milano | Fabio |
Tom | Mugnaio |
Lisa | Williams |
Nota:
UNION ALL
è più veloce di UNION
, ma UNION
rimuove le righe duplicate. La scelta dipende dai dati del risultato di cui abbiamo bisogno.