Quando si tratta di join, la maggior parte di noi lavora principalmente con il limite di due tabelle e cose simili. Tuttavia, è frequente la necessità di unire tre tabelle per ottenere un layout e una visione dei dati più significativi. Prendi ad esempio il caso in cui desideri recuperare un elenco di film, il relativo inventario di noleggio corrispondente e i dettagli effettivi del noleggio. Ciascuna di queste unità, ad esempio film, inventario e dettagli sul noleggio, si trova in tabelle individuali.
In questo tutorial ti guideremo attraverso le varie unioni e tecniche che puoi utilizzare per unire tre tabelle in SQL.
Requisiti:
A scopo dimostrativo utilizzeremo MySQL versione 80 e il database di esempio Sakila. Per proseguire, puoi scaricare e configurare il database Sakila nel tuo server MySQL. Sentiti libero di utilizzare qualsiasi altro set di dati che ritieni applicabile.
Tipi di join in SQL
Prima di passare all'applicazione dei join, iniziamo discutendo i vari tipi di join disponibili nei database SQL.
UNIONE INTERNA
Il primo tipo di join è un INNER JOIN. Questo tipo di join restituisce solo le righe che contengono un valore corrispondente in entrambe le tabelle. È un tipo di unione molto comune ed è il più semplicistico quando si uniscono due tabelle.
La sintassi è la seguente:
SELEZIONA colonneDALLA tabella1
INNER JOIN tabella2 SU tabella1.nome_colonna = tabella2.nome_colonna;
SINISTRA UNISCITI
Nel caso di LEFT JOIN, restituisce tutte le righe della tabella di sinistra e le righe corrispondenti della tabella di destra. Se non ci sono valori corrispondenti dalla tabella di destra, il join aggiunge al loro posto i valori NULL.
La sintassi è la seguente:
SELEZIONA colonneDALLA tabella1
SINISTRA UNISCI tabella2 SU tabella1.nome_colonna = tabella2.nome_colonna;
ISCRIVITI GIUSTO
Come puoi immaginare, il RIGHT JOIN è l'opposto del LEFT JOIN. Questo tipo di join restituisce tutte le righe della tabella di destra e solo le righe corrispondenti della tabella di sinistra. Se non sono presenti righe corrispondenti nella tabella di sinistra, il join vi aggiunge i valori NULL.
Quella che segue è la sintassi di un RIGHT JOIN:
SELEZIONA colonneDALLA tabella1
GIUNZIONE A DESTRA table2 SU tabella1.nome_colonna = tabella2.nome_colonna;
JOIN ESTERNO COMPLETO
Il prossimo tipo di join che incontrerai nei database SQL è un FULL OUTER JOIN. Questo tipo di join restituisce tutte le righe quando esiste una corrispondenza nella tabella di destra o di sinistra. Se non esiste alcun valore corrispondente in nessuno dei due, restituisce NULL per le colonne della tabella senza corrispondenza.
Di seguito viene illustrata la sintassi di un FULL OUTER JOIN:
SELEZIONA colonneDALLA tabella1
FULL OUTER JOIN tabella2 SU tabella1.nome_colonna = tabella2.nome_colonna;
È bene tenere presente che non tutti i motori di database supportano i FULL OUTER JOINS. Per raggiungere questo obiettivo, potrebbe essere necessario lavorare con altri tipi di JOINS o sottoquery.
Esempi:
Esploriamo alcuni esempi su come possiamo utilizzare questi tipi di join per unire tre tabelle in SQL.
Esempio 1: utilizzo di INNER JOIN
Iniziamo con un INNER JOIN. Supponiamo di voler recuperare un elenco di film, l'inventario del noleggio e i dettagli del noleggio corrispondenti.
Possiamo utilizzare più INNER JOINS sulle tabelle associate come mostrato nell'esempio seguente:
SELEZIONAREtitolo.film,
inventario.inventario_id,
noleggio.data_noleggio
DA
film
Inventario INNER JOIN SU
film.film_id = inventario.film_id
Noleggio INNER JOIN SU
inventory.inventory_id = noleggio.inventory_id;
Nella query di esempio fornita, iniziamo unendo le tabelle film e inventario in base alla colonna 'film_id'. Prendiamo quindi il set risultante e lo uniamo alla tabella di noleggio in base alla colonna 'inventory_id'.
Ciò garantisce di unire tre tabelle con un INNER JOIN di base. L'insieme risultante è il seguente:
Esempio 2: utilizzo di INNER JOIN e LEFT JOIN
Diciamo che ora vogliamo l'elenco dei film, l'elenco degli inventari di noleggio (se presenti) e i dettagli di noleggio associati.
Vogliamo anche assicurarci che anche se un film non dispone di un inventario a noleggio, lo includiamo comunque nel risultato. È qui che entrano in gioco INNER JOIN e LEFT JOIN.
Considera il seguente esempio:
SELEZIONAREtitolo.film,
inventario.inventario_id,
noleggio.data_noleggio
DA
film
Inventario INNER JOIN SU
film.film_id = inventario.film_id
SINISTRA ISCRIVITI noleggio SU
inventory.inventory_id = noleggio.inventory_id;
In questo esempio, utilizziamo un INNER JOIN per unire la tabella del film e dell'inventario per garantire di ottenere i titoli con l'inventario disponibile. Utilizziamo quindi LEFT JOIN per unirci alla tabella di noleggio per recuperare i dettagli del noleggio se disponibili e NULL per qualsiasi titolo che non abbia una cronologia di noleggio.
L'insieme risultante è il seguente:
Conclusione
In questo tutorial abbiamo imparato a conoscere i vari tipi di JOINS in SQL, come funzionano e come possiamo usarli per combinare tre tabelle.