SQL JOIN

Il join SQL viene utilizzato per query dati da una o più tabelle in base alla relazione tra le colonne di queste tabelle.

Join e Key

A volte, per ottenere risultati completi, dobbiamo ottenere risultati da due o più tabelle. Dobbiamo eseguire un join.

Le tabelle nel database possono essere collegate tra loro tramite una chiave. La chiave primaria (Primary Key) è una colonna in cui ogni valore della riga è unico. Nella tabella, ogni valore della chiave primaria è unico. Lo scopo di questo è di incrociare i dati tra le tabelle senza ripetere tutti i dati di ciascuna tabella.

Vediamo ora la tabella "Persons":

Id_P LastName FirstName Indirizzo Città
1 Adams John Via Oxford Londra
2 Bush George Via Fifth Avenue New York
3 Carter Thomas Via Chang'an Pechino

Si prega di notare che la colonna "Id_P" è la chiave primaria della tabella "Persons". Questo significa che non ci sono due righe che possono avere lo stesso Id_P. Anche se i nomi di due persone sono completamente identici, l'Id_P può distinguerli.

Vediamo ora la tabella "Orders":

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

Si prega di notare che la colonna "Id_O" è la chiave primaria della tabella "Orders", contemporaneamente, la colonna "Id_P" nella tabella "Orders" viene utilizzata per riferirsi alla tabella "Persons" senza utilizzare il nome esatto delle persone.

Attenzione, la colonna "Id_P" mette in relazione le due tabelle superiori.

Citazione di due tabelle

Possiamo ottenere dati da due tabelle citando due tabelle:

Chi ha ordinato il prodotto e cosa ha ordinato?

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

Risultato del set:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

SQL JOIN - Utilizzo di Join

Oltre al metodo sopra descritto, possiamo anche utilizzare la parola chiave JOIN per ottenere dati da due tabelle.

Se vogliamo elencare tutte le ordinazioni delle persone, possiamo utilizzare la seguente espressione SELECT:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

Risultato del set:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

Diversi JOIN SQL

Oltre al INNER JOIN (connessione interna) utilizzato negli esempi precedenti, possiamo utilizzare altri tipi di connessioni.

Di seguito è elencato i tipi di JOIN che puoi utilizzare, nonché le differenze tra loro.

  • JOIN: Restituisce le righe se c'è almeno una corrispondenza nella tabella
  • LEFT JOIN: Restituisce tutte le righe della tabella sinistra anche se non ci sono corrispondenze nella tabella destra
  • RIGHT JOIN: Restituisce tutte le righe della tabella destra anche se non ci sono corrispondenze nella tabella sinistra
  • FULL JOIN: Restituisce le righe se esiste una corrispondenza in uno dei due tavoli