Riepilogo: in questo tutorial imparerai come eseguire query sui dati da più tabelle utilizzando l’istruzione SQL INNER JOIN.
Nel tutorial precedente, hai imparato come eseguire query sui dati da una singola tabella utilizzando l’istruzione SELECT. Tuttavia, spesso si desidera eseguire query sui dati di più tabelle per ottenere un set di risultati completo per l’analisi. Per eseguire query sui dati da più tabelle si utilizzano istruzioni join.
SQL fornisce diversi tipi di join come inner join, outer join (join esterno sinistro o join sinistro, join esterno destro o join destro e join esterno completo ) e auto join. In questo tutorial, ti mostreremo come utilizzare la clausola INNER JOIN
.
Sintassi SQL INNER JOIN
Quanto segue illustra INNER JOIN
sintassi per l’unione di due tabelle:
1
2
3
4
5
|
SELEZIONA
colonna1, colonna2
FROM
table_1
INNER JOIN table_2 ON join_condition;
|
Esaminiamo la sintassi sopra in maggior dettaglio:
- Le
table_1
etable_2
sono chiamate tabelle unite. - Per ogni riga in
table_1
, la query trova la riga corrispondente intable_2
che soddisfa la condizione di join. Se viene trovata la riga corrispondente, la query restituisce una riga che contiene i dati di entrambe le tabelle. In caso contrario, esamina la riga successiva intable_1
e questo processo continua fino a quando non vengono esaminate tutte le righe intable_1
.
Per unire più di due tabelle, viene applicata la stessa logica.
Esempi di SQL INNER JOIN
SQL INNER JOIN: interrogazione dei dati da due tabelle esempio
In questo esempio, utilizzeremo le tabelle products
e categories
nel database di esempio. L’immagine seguente mostra il diagramma del database.
Nel diagramma sopra:
- Una categoria può avere molti prodotti.
- Un prodotto appartiene a una sola categoria.
Pertanto, esiste una relazione molti-a-uno tra le righe nel categories
tabella e righe nella tabella products
. Il collegamento tra le due tabelle è la colonna categoryid
.
Dobbiamo interrogare i seguenti dati da entrambe le tabelle:
-
productID
,productName
dalla tabellaproducts
. -
categoryName
dallacategories
tabella.
La seguente query recupera i dati da entrambe le tabelle:
1
2
3
4
5
6
|
SELEZIONA
productID, productName, categoryName
FROM
prodotti
INNER JOIN
categorie ON categories.categoryID = products.categoryID;
|
La condizione di join è specificata nella clausola INNER JOIN
dopo la parola chiave ON
come espressione:
1
|
categories.categoryID = products.categoryID
|
Per ogni riga in products
, la query trova una riga corrispondente nella categories
tabella che ha la stessa categoryid.
Se c’è una corrispondenza tra due righe in entrambe le tabelle, restituisce una riga che contiene le colonne specificate nella clausola SELECT, cioè, l’ID del prodotto, il nome del prodotto e il nome della categoria; in caso contrario, controlla la riga successiva nella tabella products
per trovare la riga corrispondente nella tabella categories
. Questo processo continua fino a quando non viene esaminata l’ultima riga della tabella dei prodotti.
SQL INNER JOIN – interrogazione dei dati da tre tabelle
Possiamo usare le stesse tecniche per unire tre tabelle.La seguente query seleziona productID
, productName
, categoryName
e supplier
dalle tabelle products
, categories
e suppliers
:
1
2
3
4
5
6
7
8
9
10
11
|
SELEZIONA
productID,
productName,
categoryName,
companyName AS fornitore
FROM
prodotti
INNER JOIN
categorie ON categorie. categoryID = products.categoryID
INNER JOIN
Suppliers ON Suppliers.supplierID = products.supplierID
|
SQL INNER JOIN implicito
Esiste un’altra forma di INNER JOIN
chiamata inner join implicito come mostrato di seguito:
1
2
3
4
5
6
7
|
SELEZIONA
colonna1, colonna2
DA
tabella_1,
tabella_2
DOVE
join_condition;
|
In questo modulo, specifichi tutte le tabelle unite in la FROM
clausola e inserire la condizione di join nella clausola WHERE dell’istruzione SELECT
. Possiamo riscrivere l’esempio di query sopra utilizzando il INNER JOIN
come segue:
1
2
3
4
5
6
7
|
SELEZIONA
productID, productName, categoryName
FROM
prodotti,
categorie
WHERE
products.categoryID = categories.categoryID;
|