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

Guida illustrata all'INNER JOIN di SQL

Che cos'è e come funziona una INNER JOIN SQL? Scopriamolo!

Nel mio ultimo articolo, ho discusso il metodo Operazione CROSS JOIN in SQL. Oggi analizzeremo INNER JOIN e come utilizzarlo. È la stessa cosa di JOIN? Quante tabelle si possono collegare con INNER JOIN?

Queste sono tutte buone domande. Vediamo le risposte!

Che cos'è un INNER JOIN?

INNER JOIN Combina i dati di più tabelle unendoli in base a un record corrispondente. Questo tipo di join richiede una condizione di unione, che spiegheremo tra poco.

Per illustrare il funzionamento di INNER JOIN, utilizzeremo alcune semplici tabelle. Due di esse, color e shoes sono mostrate di seguito:

color

id name
1 yellow
2 green
3 pink

shoes

id size color_id
1 seven 2
2 eight 2
3 nine 2
4 seven 1
5 nine 1
6 seven 3
7 ten NULL

La tabella color memorizza un numero ID e un nome per ogni colore. La tabella shoes memorizza un numero ID per ogni paio di scarpe, il numero di scarpe e un numero ID che si riferisce a un colore nella tabella. color tabella.

Come funziona una INNER JOIN

In questo esempio, INNER JOIN unisce i record della tabella shoes con i record della tabella color attraverso la colonna color_id della tabella shoes della tabella. I valori di questa colonna sono gli stessi della colonna id della tabella. color della tabella, quindi produce l'insieme di risultati desiderato. Osservate la seguente query:

SELECT *  FROM  shoes
INNER JOIN color  ON color.id = shoes.color_id;

L'istruzione SELECT prende tutti i record dalla tabella elencata dopo la clausola FROM - in questo caso, la tabella shoes tabella. Poi c'è un INNER JOIN con il nome della tabella a cui vogliamo abbinare i record (cioè la tabella). color tabella). Il predicato ON indica la condizione di corrispondenza che i record di entrambe le tabelle devono avere. In questo caso, la condizione è che il campo id della tabella color e il campo color_id della tabella shoes devono avere valori corrispondenti. Se un record non ha una corrispondenza, sarà escluso dai risultati.

Osservate l'insieme dei risultati di questa query:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Ora possiamo vedere il colore di ogni paio di scarpe, grazie al campo INNER JOIN. Ma notiamo che il record con nella tabella è stato escluso dai risultati. shoes con NULL nella colonna color_id non viene mostrato: non ha trovato corrispondenza in nessuno dei record della tabella. color tabella.

JOIN o INNER JOIN?

È possibile omettere la parte INNER di INNER JOIN; JOIN funziona allo stesso modo. Osservate l'istruzione seguente.

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id;

Giunzione con WHERE

È anche possibile utilizzare una clausola WHERE come una INNER JOIN. (Questa è una versione precedente della sintassi SQL (ANSI-89); i comandi JOIN utilizzano ANSI-92). Ecco come funziona l'uso di una WHERE:

SELECT *  FROM  shoes, color  
WHERE color.id = shoes.color_id ;

Il risultato è lo stesso:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Utilizzo di una INNER JOIN su più tabelle

INNER JOIN può essere utilizzato su più di due tabelle. Osservate le tre tabelle qui sotto:

color

id name
1 yellow
2 green
3 pink

material

id name
1 leather
2 cotton
3 NULL

shoes

id size color_id material_id
1 seven 2 1
4 seven 1 2
5 nine 1 1
6 seven 3 NULL
7 ten NULL 1

Utilizziamo un INNER JOIN per combinare le informazioni presenti in tutte e tre le tabelle. La query seguente recupera i record di tutte le scarpe con informazioni sul colore e sul materiale:

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id
JOIN material  ON material.id = shoes.material_id ;

Si noti che solo le scarpe con record nonNULL nelle colonne color_id e material_id sono mostrate nel set di risultati.

id size color_id material_id id name id name
1 seven 2 1 2 green 1 leather
4 seven 1 2 1 yellow 2 cotton
5 nine 1 1 1 yellow 1 leather

INNER JOIN vs. CROSS JOIN

Come abbiamo visto, INNER JOIN combina le informazioni di due o più record che hanno campi corrispondenti. Cosa succede quando si usa CROSS JOIN per unire le colonne shoes e color CROSS JOIN non accetta alcuna condizione di ON, il che significa che restituisce un prodotto cartesiano. Osservate la query e l'insieme dei risultati mostrati di seguito:

SELECT *  FROM  shoes
CROSS JOIN  color ;

Risultato?

id size color_id id name
1 seven 2 1 yellow
2 eight 2 1 yellow
3 nine 2 1 yellow
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 1 yellow
7 ten NULL 1 yellow
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 2 green
5 nine 1 2 green
6 seven 3 2 green
7 ten NULL 2 green
1 seven 2 3 pink
2 eight 2 3 pink
3 nine 2 3 pink
4 seven 1 3 pink
5 nine 1 3 pink
6 seven 3 3 pink
7 ten NULL 3 pink

Tutti i record della tabella shoes sono stati uniti a tutti i record della tabella color tabella. Questo crea alcuni errori. Ad esempio, alcune scarpe non sono elencate con il colore corretto: le scarpe taglia 8 sono disponibili solo in verde (il loro valore color_id è 2), ma in questa istanza di join sono abbinate ad altri colori. I record di NULL nella tabella shoes vengono abbinati ai colori, anche se non hanno un valore paragonabile nel campo color_id.

Per saperne di più sulle JOIN INTERNE

INNER JOINLe funzioni di join sono piuttosto comuni in SQL. L'obiettivo di questo articolo è stato quello di introdurre i concetti alla base di INNER JOIN, ma c'è molto altro da imparare. Perché non dare un'occhiata al sito LearnSQL SQL Basics corso per saperne di più.