Database
 sql >> Database >  >> RDS >> Database

Come combinare i risultati di due query in SQL

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.