Corso
Anche se le join SQL si usano comunemente per combinare dati da due tabelle, non c’è motivo di fermarsi lì. Puoi infatti unire dati da tre o più tabelle per scoprire relazioni e insight più complessi dai tuoi dati.
In questo articolo ti guiderò con esempi di join tra tre tabelle in SQL; vedremo anche implementazioni specifiche per database e best practice. Ti consiglio vivamente di seguire i nostri corsi Introduction to SQL e Learn SQL per tutte le conoscenze fondamentali più importanti.
TL;DR
-
Usa
INNER JOINquando vuoi solo i record che corrispondono in tutte le tabelle,LEFT JOINquando vuoi tutto dalla tabella principale anche senza corrispondenze, eRIGHT JOINse la tabella più a destra è la priorità. -
SQL elabora le join da sinistra a destra, quindi l’ordine conta. Costruisci le query passo dopo passo e controlla i risultati man mano.
-
Per prestazioni migliori, indicizza le colonne usate nelle join, filtra il prima possibile con
WHERE, unisci prima le tabelle più piccole e seleziona solo le colonne necessarie.
I passaggi per unire 3 tabelle in SQL
Unire tre tabelle in SQL ti permette di eseguire query complesse per recuperare dati su più tabelle. Quando uniamo tre tabelle, usiamo la clausola JOIN per combinare i dati di queste tabelle.
Supponi di avere le seguenti tre tabelle: Customers, Products e Orders.

Esempio di tabella Customers in SQL. Immagine dell’autore.

Esempio di tabella Products in SQL. Immagine dell’autore.

Esempio di tabella Orders in SQL. Immagine dell’autore.
Per prima cosa, puoi unire le tabelle Customers e Orders per mostrare quali clienti hanno effettuato ordini e i relativi dettagli, come order_id, order_date e la quantity ordinata.
-- Select data from Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Orders.quantity
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id;

Esempio di JOIN SQL tra le tabelle Customers e Orders. Immagine dell’autore.
Infine, puoi combinare le tre tabelle, Customers, Orders e Products, per ottenere una vista completa dei clienti, dei loro ordini, dei prodotti acquistati e del costo totale per ciascun ordine.
-- Select data starting with Customers
SELECT
Customers.customer_id,
Customers.first_name,
Customers.last_name,
Orders.order_id,
Orders.order_date,
Products.product_name,
Orders.quantity,
Products.price,
(Orders.quantity * Products.price) AS total_cost -- Total cost calculation
FROM Customers
-- Join the Orders table based on customer_id
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join the Products table based on product_id
INNER JOIN Products
ON Orders.product_id = Products.product_id;

Esempio di JOIN SQL su tre tabelle. Immagine dell’autore.
Vediamo ora esempi pratici di utilizzo di INNER JOIN, LEFT JOIN e RIGHT JOIN per unire tre tabelle. Dai un’occhiata al nostro tutorial Introduction to SQL Joins per saperne di più sui diversi tipi ed esempi di join.
Esempi di come unire 3 tabelle in SQL
Vediamo ora alcuni esempi pratici usando INNER JOIN, LEFT JOIN e RIGHT JOIN per unire tre tabelle.
Se ti sfugge il significato di una di queste join e vuoi fare ulteriore pratica per padroneggiare davvero le tecniche giuste, iscriviti al nostro corso Joining Data in SQL, che non solo ti aiuterà con le join SQL ma ti insegnerà anche teoria degli insiemi relazionale e subquery.
Uso di INNER JOIN
Un INNER JOIN recupera i record con valori corrispondenti in tutte e tre le tabelle, filtrando qualsiasi record che non corrisponde. Usare INNER JOIN è ideale quando ti servono solo risultati che hanno relazioni dirette in tutte le tabelle coinvolte.
Supponi di avere tre tabelle: Customers, Orders e Products. La query seguente recupera solo i clienti che hanno effettuato ordini e include i dettagli dei prodotti associati a ciascun ordine.
-- Select customer details, order information, and associated product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
INNER JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
INNER JOIN Products
ON Orders.product_id = Products.product_id;
Uso di LEFT JOIN
Il LEFT JOIN restituisce tutti i record della prima tabella (a sinistra) e quelli corrispondenti dalle altre due tabelle. Se non c’è corrispondenza, vengono restituiti valori NULL per le colonne della tabella a destra. Il LEFT JOIN è utile quando vuoi recuperare tutti i record dalla tabella principale anche se alcune righe non hanno dati correlati nelle altre tabelle.
Nel seguente esempio, tutti i clienti compariranno nel risultato, anche se non hanno effettuato ordini. I campi dati restituiranno valori NULL se non c’è un ordine o un prodotto corrispondente.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
FROM Customers
-- Join Orders table
LEFT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
LEFT JOIN Products
ON Orders.product_id = Products.product_id;
Nota che LEFT JOIN è equivalente a LEFT OUTER JOIN in SQL. Abbiamo un tutorial con i dettagli: SQL LEFT JOIN vs. LEFT OUTER JOIN.
Uso di RIGHT JOIN
Un RIGHT JOIN recupera tutti i record della terza tabella (più a destra) e quelli corrispondenti dalle tabelle a sinistra. Anche se il RIGHT JOIN è meno comune, è comunque utile quando si vogliono dare priorità ai record della tabella più a destra.
Per esempio, in un’analisi dell’inventario, potresti voler sapere quali prodotti hanno ordini o interazioni con i clienti. Tutti i prodotti saranno elencati nella query seguente, inclusi eventuali dati di ordini o clienti associati. Se ci sono prodotti che non sono stati ordinati, i campi order_id e customer_name mostreranno NULL.
-- Select customer details, order information, and product names
SELECT
Customers.customer_id,
Customers.customer_name,
Orders.order_id,
Products.product_name
-- Select from Customers table
FROM Customers
-- Join Orders table
RIGHT JOIN Orders
ON Customers.customer_id = Orders.customer_id
-- Join Products table
RIGHT JOIN Products
ON Orders.product_id = Products.product_id;
Anche se gli esempi sopra mostrano l’uso di un singolo tipo di join (INNER JOIN, LEFT JOIN o RIGHT JOIN), è del tutto possibile — e spesso necessario — combinare tipi di join diversi nella stessa query per gestire relazioni tra dati più complesse. Ad esempio, potresti usare un LEFT JOIN per includere tutti i record di una tabella e un INNER JOIN per un’altra relazione nella stessa query.
A questo proposito, va anche detto che SQL elabora le join in sequenza da sinistra a destra, quindi l’ordine determina come le tabelle vengono combinate e come vengono gestiti i valori NULL. È per questo che ho iniziato l’articolo mostrando il processo in due passaggi. Costruire la query gradualmente e verificare i risultati in modo incrementale è la strada giusta. LEFT JOIN seguito da INNER JOIN è spesso diverso da INNER JOIN seguito da LEFT JOIN.
Perché dobbiamo unire 3 tabelle in SQL
Facciamo un attimo il punto sul design dei database. Il motivo per cui oggi è comune dover fare join su più di due tabelle è che la normalizzazione dei database è ormai diffusa. I database (e in realtà le persone che li progettano) organizzano le informazioni in tabelle distinte e correlate. Questo serve a eliminare la ridondanza (e anche per altri motivi). Questa scomposizione del database fa sì che i dati relativi a entità diverse — come le tabelle Customers, Orders e Products che abbiamo visto sopra — siano archiviati separatamente.
In altre parole, poiché i dati sono spesso archiviati in uno schema normalizzato, recuperarli richiede spesso di combinare informazioni da più tabelle. Per questo motivo dovremmo saper scrivere query con molte join perché, semplicemente, è così che i dati sono probabilmente strutturati. Il nostro corso Database Design è una buona risorsa su questi concetti.
Funzionalità di join specifiche per database
Sebbene le join SQL siano coerenti nella maggior parte dei database relazionali, ci sono alcune differenze nella gestione di join multipli che coinvolgono tre o più tabelle. Vediamo implementazioni e considerazioni specifiche per database, per evitare insidie e problemi di ottimizzazione.
MySQL
MySQL in genere si comporta bene con join di base ma può faticare con query complesse che coinvolgono più tabelle. Il comando EXPLAIN di MySQL è utile per capire le prestazioni delle join e individuare modi per ottimizzare le query con indicizzazione o riscrittura. MySQL supporta anche la parola chiave STRAIGHT_JOIN, che forza l’ordine delle join, potenzialmente migliorando le prestazioni quando l’ottimizzazione predefinita non è ideale.
PostgreSQL
Il potente ottimizzatore di PostgreSQL lo rende molto efficiente nelle join complesse, anche con dataset grandi. Il supporto per query ricorsive tramite la clausola WITH RECURSIVE consente di unire dati gerarchici su più tabelle. Le funzioni finestra di PostgreSQL sono avanzate e possono integrare le join permettendo analisi riga per riga all’interno di un dataset unito.
SQL Server
SQL Server consente suggerimenti di join specifici (MERGE JOIN, LOOP JOIN e HASH JOIN) per scavalcare il comportamento predefinito, migliorando le prestazioni delle join su più tabelle. Gli operatori CROSS APPLY e OUTER APPLY in SQL Server sono strumenti potenti per unire tabelle con funzioni che restituiscono tabelle, offrendo maggiore flessibilità nelle query multi-tabella.
Ti consiglio di seguire il corso di DataCamp Introduction to SQL Server per comprendere le diverse funzionalità di SQL Server nelle query sui dati. Prova anche il nostro skill track SQL Server Fundamentals per migliorare le capacità di join e analisi dei dati. Il career track SQL Server Developer ti fornirà le competenze per scrivere, diagnosticare e ottimizzare le query con SQL Server.
Oracle SQL
Oracle supporta tutte le join standard e offre opzioni uniche come NATURAL JOIN, che unisce automaticamente le tabelle in base ai nomi di colonna corrispondenti. Il supporto di Oracle per le query gerarchiche con CONNECT BY può a volte ridurre la necessità di join aggiuntive gestendo i dati annidati in modo più efficiente.
Best practice quando unisci 3 tabelle in SQL
Unire tre tabelle in SQL può aumentare la complessità delle query e incidere sulle prestazioni, soprattutto con la crescita dei dati. Di seguito alcune best practice e tecniche di ottimizzazione per migliorare le prestazioni delle query.
-
Usa un’indicizzazione appropriata: indicizza le colonne usate spesso nelle condizioni di join per accelerare il recupero dei dati riducendo la quantità di dati scansionati.
-
Filtra presto usando WHERE e condizioni di JOIN: inserisci le condizioni di filtro direttamente nella clausola
JOINoWHEREper ridurre i dati da elaborare nelle join successive, migliorando le prestazioni. -
Considera l’ordine e il tipo di join: quando unisci più tabelle, unisci prima le tabelle più piccole per ridurre il dataset il più rapidamente possibile. Evita di usare join
LEFToRIGHTse la tua analisi non richiede record senza corrispondenze. -
Minimizza le colonne selezionate con SELECT: evita di usare
SELECT *per includere colonne non necessarie. Seleziona esplicitamente le colonne richieste per ridurre i dati restituiti da ciascuna tabella, minimizzando l’uso di memoria e migliorando le prestazioni. -
Usa subquery o tabelle temporanee per join complesse: valuta di suddividere la query in parti più piccole usando subquery per join molto complesse. Per join che coinvolgono query complesse ripetute, valuta di memorizzare risultati intermedi in tabelle temporanee per risparmiare tempo di elaborazione, soprattutto per query con calcoli estesi.
Conclusione e approfondimenti
Unire tre tabelle in SQL ti consente di combinare dati su più tabelle per un’analisi completa e una gestione efficace del database. Padroneggiare le tecniche giuste assicura che il tuo codice sia efficiente, scalabile e performante.
Se vuoi diventare un data analyst competente, dai un’occhiata al nostro career track Associate Data Analyst in SQL per apprendere le competenze necessarie. Il corso Reporting in SQL è adatto anche se vuoi imparare a creare dashboard professionali con SQL. Infine, ti consiglio di ottenere la SQL Associate Certification per dimostrare la tua padronanza dell’uso di SQL per l’analisi dei dati e far risaltare il tuo CV.
FAQ
Quali tipi di join si possono usare per unire tre tabelle?
Puoi usare INNER JOIN, LEFT JOIN, RIGHT JOIN e, occasionalmente, FULL JOIN per combinare tre tabelle.
L’ordine delle join conta quando si uniscono tre tabelle?
L’ordine delle join può influire sulle prestazioni, soprattutto con tabelle grandi. Iniziare da tabelle più piccole o fortemente filtrate spesso migliora l’efficienza.
Come ottimizzo le prestazioni quando unisco tre tabelle in SQL?
Per ottimizzare le prestazioni, assicurati un’indicizzazione adeguata delle colonne usate nelle join, limita il numero di righe restituite con clausole WHERE e seleziona solo le colonne necessarie.
Posso unire più di tre tabelle?
Puoi unire più di tre tabelle in SQL, ma la query può diventare più complessa e richiedere ottimizzazioni delle prestazioni.


