back to top

Gestire JOIN a tre tabelle

Nella guida a SQL abbiamo visto come creare unioni tra due tabelle utilizzando INNER JOIN. In questo articolo vedremo come fare la stessa cosa gestendo non più due, ma tre tabelle.

In realtà si tratta di un operazione molto semplice che non differisce da una comune JOIN su 2 tabelle. Facciamo subito un esempio pratico: pensiamo ad un ipotetico database acquisti di una semplice applicazione di e-commerce composto da tre tabelle così strutturate:

utenti (utilizzata per la gestione degli utenti registrati)

  • ute_id
  • ute_nome
  • ute_cognome
prodotti (utilizzata per il catalogo dei prodotti in vendita)
  • prod_id
  • prod_nome
  • prod_descrizione
  • prod_prezzo
acquisti (utilizzata per registrare degli acquisti)
  • acq_id
  • acq_ute_id
  • acq_prod_id
  • acq_data
Ora poniamo di voler recuperare, utilizzando una sola query, le seguenti informazioni relativi agli acquisti effettuati da un dato userID (ad es. 1), informazioni contenute in tre tabelle diverse: nome e cognome dell utente (tabella utenti), nome, descrizione e prezzo del prodotto acquistato (tabella prodotti) e la data dell’acquisto (tabella acquisti). Come fare? Semplice… basta utilizzare una query del genere:
SELECT
  utenti.ute_nome, utenti.ute_cognome,
  prodotti.prod_nome, prodotti.prod_descrizione, prodotti.prod_prezzo,
  acquisti.acq_data
FROM utenti
INNER JOIN acquisti
ON utenti.ute_id = acquisti.acq_ute_id
INNER JOIN prodotti
ON prodotti.prod_id = acquisti.acq_prod_id
WHERE utenti.ute_id = 1; 
Come avrete notato la comune clausula FROM (che individua la prima tabella) è seguita da due INNER JOIN (che individuano rispettivamente la seconda e la terza tabella) accompagnate dall’istruzione di collegamento ON che serve "da ponte" al fine di creare un collegamento razionale tra le diverse tabelle.

Per concludere non mi resta che ricordarvi che, ovviamente, è possibile utilizzare la tecnica vista sopra anche per query più complesse che coinvolgano 4, 5 o più tabelle… in realtà vi consiglio di non esagerare nella costruzioni di simili query che, seppur teoricamente fattibili, risultano spesso difficimente gestibili nella pratica applicativa.

Altri contenuti interessanti

Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'รจ il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicitร