A volte dobbiamo selezionare dati da due o più tabelle per avere dei risultati completi. In questi casi occorre effettuare dei Join tra le tabelle.

Vediamo come.


 

Joins e chiavi


Le tabelle in un database possono essere messe in relazione l’una con l’altra tramite delle chiavi.
Una chiave si dice primaria quando ha un valore unico per le righe. Lo scopo è quello di legare i dati tra le tabelle senza dover ripetere i dati in tutte le tabelle.
Nella tabella in basso denominata "Impiegati" il campo "ID_Impiegato" è la chiave primaria, questo significa che non possono esistere due righe con lo stesso identificatore. ID_Impiegato distingue due persone, anche se queste hanno lo stesso nome.

Se guardiamo l’esempio, notiamo che:
La colonna "ID_Impiegato" è la chiave primaria della tabella "Impiegati"
"ID_Prodotto" è la chiave primaria per la tabella "Ordini"
La colonna "ID_Impiegato" nalla tabella "Ordini" è usata per fare riferimento alla persona nella tabella "Impiegati" senza dover usare il nome

Tabella Impiegati
ID_Impiegato

Nome
01
Paolino Paperino
02
Paperon De Paperoni
03
Aldo Baglio
04
Aldo Bisio

Ordini:
ID_Prodotto

Prodotto
ID_Imoiegato
234
Stampante
01
657
Tavolo
03
865
Sedia
03

Fare riferimento a due tabelle

Possiamo seezionare dei dati da due tabelle facendo riferimento alle due tabelle in questo modo:

Esempio

Chi ha ordinato un prodotto, e quali prodotti sono stati ordinati?
SELECT Impiegati.Nome, Ordini.Prodotto
FROM Impiegati, Ordini
WHERE Impiegati.ID_Impiegato=Ordini.ID_Impiegato
Risultato
Nome

Prodotto
Paolino Paperino
Stampante
Aldo Baglio
Tavolo
Aldo Baglio
Sedia


Esempio

Chi ha ordinato una stampante?
SELECT Impiegati.Nome
FROM Impiegati, Ordini
WHERE Impiegati.ID_Impiegato=Ordini.ID_Impiegato
AND Ordini.Prodotto='Stampante'
Risultato

Nome
Paolino Paperino




 

Utilizzare i Join

Possiamo anche selezionare dei dati da due tabelle utilizzando la parola chiave JOIN, come negli esempi seguenti:

Abbiamo tre tipi di Join:
INNER JOIN
LEFT JOIN
RIGTH JOIN
Con significati leggermente diversi



 
INNER JOIN

L'INNER JOIN restituisce le righe delle tabelle se c'è un legame, altrimenti non le mostra.

Sintassi
SELECT campo1, campo2, campo3
FROM prima_tabella
INNER JOIN seconda_tabella
ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna
Esempio

Chi ha ordinato un prodotto, e quali prodotti sono stati ordinati?
SELECT Impiegati.Nome, Ordini.Prodotto
FROM Impiegati
INNER JOIN Ordini
ON Impiegati.ID_Impiegato=Ordini.ID_Impiegato
Risultato
Nome

Prodotto
Paolino Paperino
Stampante
Aldo Baglio
Tavolo
Aldo Baglio
Sedia


Esempio

Chi ha ordinato una stampante?
SELECT Impiegati.Nome
FROM Impiegati
INNER JOIN Ordini
ON Impiegati.ID_Impiegato=Ordini.ID_Impiegato
WHERE Ordini.Prodotto='Stampante'
Risultato

Nome
Nome

Paolino Paperino




 
LEFT JOIN

Il LEFT JOIN restituisce tutte le righe della prima tabella (nell’esempio Impiegati), anche se non ci sono
corrispondenze nella seconda tabella (nell’esempio Ordini).

Sintassi
SELECT campo1, campo2, campo3
FROM prima_tabella
LEFT JOIN seconda_tabella
ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna
Esempio

Visualizzare tutti gli impiegati, ed i loro ordini (se ne hanno)
SELECT Impiegati.Nome, Ordini.Prodotto
FROM Impiegati
LEFT JOIN Ordini
ON Impiegati.ID_Impiegato=Ordini.ID_Impiegato
Risultato
Nome

Prodotto
Paolino Paperino
Stampante
Paperon De Paperoni
Tavolo
Aldo Baglio
Tavolo
Aldo Baglio
Sedia
Aldo Bisio
 




 
RIGHT JOIN

Un RIGHT JOIN restituisce tutte le righe della seconda tabella, anche se non ci sono legami con la prima

Sintassi
SELECT campo1, campo2, campo3
FROM prima_tabella
RIGHT JOIN seconda_tabella
ON prima_tabella.chiave_primaria = seconda_tabella.chiave_esterna
Esempio

Mostrare tutti gli ordini, a chi appartengono (se appartengono a qualcuno)
SELECT Impiegati.Nome, Ordini.Prodotto
FROM Impiegati
RIGHT JOIN Ordini
ON Impiegati.ID_Impiegato=Ordini.ID_Impiegato
Risultato
Nome

Prodotto
Paolino Paperino
Stampante
Aldo Baglio
Tavolo
Aldo Baglio
Sedia



 
We use cookies
Attenzione! Questo sito utilizza i cookie tecnici e di terze parti per poter fornire i servizi.