Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

Come unire due tabelle in SQL

Capita spesso di utilizzare query per ottenere dati da più tabelle quando si lavora con i database relazionali. Non è difficile, se si sanno usare gli operatori SQL dedicati a questo scopo. Grazie a questo articolo imparerai a unire due tabelle utilizzando la clausola WHERE e lo speciale operatore JOIN, oltre a scoprire come filtrare le righe nel set di risultati.

Se vuoi esercitarti a unire tabelle in SQL, dai un'occhiata al nostro corso interattivo JOIN in SQL, che offre oltre 90 esercizi pratici su diversi tipi di JOIN. Per altri corsi pratici su SQL, consulta il nostro percorso Esercitazioni su SQL.

Come fare una query su una singola tabella

Innanzitutto, un rapido ripasso su come selezionare i dati da una singola tabella. Consideriamo la seguente tabella, product:

idnameprice
1Smartwatch Erin234.00
2Smartwatch Sun455.00
3Smartband Eli300.00
4Smartband White124.00

Per selezionare i dati da tutte le colonne e da tutte le righe di questa tabella, puoi usare la query:

SELECT id, name, price 
FROM product;

In questa semplice query, i nomi delle colonne da cui vuoi recuperare i dati vengono elencati dopo SELECT. Seguono la parola chiave FROM e il nome della tabella in cui sono memorizzati i dati.

Puoi anche filtrare le righe per restituire solo i dati che corrispondono ai criteri indicati. Osserva il seguente codice SQL:

SELECT name, price 
FROM product
WHERE price < 250.00;

In questo caso, il set di risultati è costituito da due sole righe con le colonne name e price:

nameprice
Smartwatch Erin234.00
Smartband White124.00

Le colonne vengono elencate dopo SELECT, poi la parola chiave FROM aiuta a specificare la tabella da cui vuoi recuperare i dati. Alla fine della query, la clausola WHERE è seguita dalla condizione del filtro che vuoi applicare. In questo esempio, la condizione confronta il valore della colonna price con 250.00. La query restituisce le informazioni di un prodotto solo se il suo prezzo è inferiore a 250.00.

Scrivere una query per ottenere dati da più tabelle con WHERE

I database relazionali sono costruiti con più tabelle che fanno riferimento l'una all'altra. Le righe di una tabella fanno riferimento a righe specifiche di un'altra, collegate da colonne ID. Vediamo ora come unire i dati di una tabella con quelli di un'altra.

Considera le due tabelle seguenti, product e category in un database sui prodotti di un magazzino:

product

idproduct_namepricecategory_id
1smartwatch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idcategory_name
1furniture
2electronics
3toys

Supponiamo di aver bisogno di alcune informazioni dal database del magazzino, come il nome dei prodotti, il prezzo e le rispettive categorie. Puoi unire le righe della tabella product con quelle della tabella category utilizzando una clausola WHERE. Osserva la query qui sotto:

SELECT product.product_name, product.price, category.category_name 
FROM product, category 
WHERE product.category_id = category.id ;

Ecco il set di risultati:

product_namepricecategory_name
smartwatch235.00electronics
bricks26.70toys
lamp128.00electronics
sofa3200.00furniture
desk1350.00furniture
power strip29.00electronics

Il comando SELECT in questa query elenca colonne provenienti da entrambe le tabelle: product_name e price da product e category_name dalla tabella category. I nomi di ciascuna colonna sono preceduti dal nome della tabella corrispondente e separati da un punto.

In seguito i nomi delle tabelle sono elencati dopo la parola chiave FROM, separati da virgole.

L'ultima parte di questa query è una clausola WHERE, con una condizione che specifica come unire le righe di entrambe le tabelle. In questo caso, i valori della colonna category_id della tabella product corrispondono a quelli della colonna id della tabella category e le righe vengono unite quando quei valori sono uguali (product.category_id = category.id). Il "category ID" dello smart watch nella tabella product è 2. Lo stesso valore nella colonna id della tabella category punta alla voce "electronics", come evidenziato in blu qui sopra.

Se sono presenti colonne con lo stesso nome in entrambe le tabelle, devi distinguerle quando le nomini in SELECT. Per farlo, scrivi il nome della tabella, seguito da un punto e poi dal nome della colonna. Nel nostro esempio, tuttavia, le tabelle hanno nomi di colonne diversi e non in comune. In questo caso, possiamo usare solo i nomi delle colonne dopo SELECT senza specificare da quali tabelle provengono, come nella query qui sotto:

SELECT product_name, price, category_name 
FROM product, category 
WHERE product.category_id = category.id ;

L'uso di WHERE è un modo per interrogare i dati di più tabelle. Si tratta di un vecchio standard SQL che, pur essendo ancora disponibile, viene utilizzato raramente. Nella prossima sezione vedremo un altro metodo.

Scrivere una query per ottenere dati da più tabelle utilizzando JOIN

Oggi il metodo più comune per unire i dati di più tabelle è l'operatore speciale JOIN, noto anche come INNER JOIN. Per vedere come funziona, useremo le stesse tabelle dell'esempio del database del magazzino, che abbiamo riportato qui sotto per comodità.

product

idnamepricecategory_id
1smart watch235.002
2bricks26.703
3lamp128.002
4sofa3200.001
5desk1350.001
6power strip29.002

category

idname
1furniture
2electronics
3toys

Osserva la seguente query, che assegna la categoria dalla tabella category a ciascun nome dei prodotti della tabella product.

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id;

L'operazione di unione viene effettuata dall'operatore JOIN. Nella clausola FROM, il nome della prima tabella (product) è seguito dall'istruzione JOIN e poi dal nome della seconda tabella (category). Seguono poi l'operatore ON e la condizione per unire le righe delle diverse tabelle. Il nome della categoria viene assegnato in base alla colonna id della tabella category, che equivale a category_id nella tabella product (product.category_id=category.id).

Ecco il set di risultati:

product_namecategory_name
smart watchelectronics
brickstoys
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

Lo smart watch ha un valore category_id corrispondente a 2. Nella colonna id della tabella category il valore 2 è associato a electronics, quindi lo smart watch viene assegnato a electronics.

L'operatore JOIN è il metodo più comune per unire più tabelle in un database. Nell'articolo "Guida illustrata a INNER JOIN in SQL", si parla di questo operatore. Anche l'articolo "INNER JOIN di SQL spiegato in parole semplici" approfondisce questo argomento. Come già detto, l'operatore INNER JOIN è equivalente a JOIN; è possibile utilizzarli in modo intercambiabile.

Selezionare i dati dalle tabelle con JOIN e WHERE

L'uso degli operatori JOIN per recuperare dati da più tabelle consente anche di filtrare più facilmente il set di risultati. Osserva la seguente query, che è una variante della precedente e si basa sugli stessi dati:

SELECT
  product.name AS product_name,
  category.name AS category_name
FROM product
JOIN category ON product.category_id=category.id
WHERE category.name != ’toys’;

Ecco il risultato:

product_namecategory_name
smart watchelectronics
lampelectronics
sofafurniture
deskfurniture
power stripelectronics

La prima parte di questa query è identica alla precedente. Tuttavia, in questo caso vengono esclusi i prodotti della categoria "toys". Abbiamo filtrato le righe nel set di risultati utilizzando la clausola WHERE per verificare se la categoria è diversa da "toys" (category.name != ’toys’).

Per ulteriori esercitazioni sulle istruzioni JOIN in SQL, ti invito a consultare il nostro corso pratico JOIN in SQL, a leggere l'articolo "Come esercitarsi sulle istruzioni JOIN in SQL" o a guardare il video "Nozioni di base su JOIN in SQL" della serie "Impariamo SQL".

Esistono anche altri operatori di tipo JOIN. Oltre a JOIN o INNER JOIN, esistono LEFT JOIN, RIGHT JOIN e FULL JOIN. Per saperne di più, leggi "JOIN in SQL per principianti". Per ulteriori esercitazioni su SQL, consulta il nostro percorso Esercitazioni su SQL.

Unire tabelle in SQL

Abbiamo visto come sia possibile recuperare tutte le informazioni degli oggetti, unendo più tabelle che fanno riferimento l'una all'altra in un database relazionale. Puoi ottenere questo risultato utilizzando WHERE o JOIN. Per saperne di più sulle differenze tra questi metodi, ti consiglio un articolo molto interessante, "Qual è la Differenza tra Avere Più Tabelle in From e Usare JOIN?".

In questo articolo ho solamente introdotto l'argomento, quindi continua a imparare!