Le JOIN in MySQL

Le join sono operazioni fondamentali nel linguaggio SQL che permettono di combinare i dati di due o più tabelle in base a criteri di corrispondenza tra le loro colonne. Il risultato sarà un unico set di righe con colonne estratte da entrambe le tabelle.

Sintassi

In generale, la sintassi per effettuare una JOIN in MySQL è la seguente:

SELECT colonna1, colonna2, ...
FROM tabella1
[INNER | LEFT | RIGHT] JOIN tabella2
ON condizione;

Dove:

  • colonna1, colonna2, ... sono le colonne che si vogliono visualizzare nel risultato della query
  • tabella1 e tabella2 sono le tabelle da combinare. Si possono usare anche alias per semplificare la scrittura della query.
  • condizione è l’espressione che stabilisce il criterio di corrispondenza tra le colonne delle due tabelle. Supporta tutti gli operatori logici e di confronto (ANDOR, >=, ecc).

Trattandosi di una SELECT, il dataset risultante può essere ulteriormente filtrato con l’uso di clausole WHERE, GROUP BY, HAVING, ecc…

Esistono diversi tipi di JOIN, che si differenziano in base alla modalità di gestione delle righe che non soddisfano i criteri. In quest’articolo vedremo le principali tipologie.

Un caso di studio

Per illustrare le principali tipologie di JOIN, consideriamo le seguenti due tabelle:

studenti

idnomecognomeclasse
1MarioRossi3A
2AnnaBianchi3B
3LucaVerdi3C
4SaraNeri3A
5MarcoGialli3B

voti

id_studentemateriavoto
1Matematica7
1Italiano8
2Matematica6
2Italiano9
3Matematica8
4Italiano7
5Matematica5

INNER JOIN

Le INNER JOIN permettono di restituire un dataset contenente solo combinazioni di righe che hanno corrispondenze in entrambe le tabelle. Supponiamo di voler estrarre un dataset con nome, cognome e voto in matematica degli studenti. Si può utilizzare una INNER JOIN tra le due tabelle, costruita come segue:
SELECT s.nome, s.cognome, v.voto
FROM studenti s
INNER JOIN voti v
ON s.id = v.id_studente
WHERE v.materia = 'Matematica';

Si noti l’utilizzo degli alias s e v.

Il risultato della query precedente sarà:

nomecognomevoto
MarioRossi7
AnnaBianchi6
LucaVerdi8
MarcoGialli5

La riga relativa a Sara Neri non compare perchè non ha una corrispondenza nella tabella voti per la clausola WHERE specificata.

Le INNER JOIN sono la tipologia più comune ed è possibile effettuarle anche omettendo la parola chiave INNER.

LEFT JOIN

Le LEFT JOIN permettono di restituire un dataset in cui sono presenti sia combinazioni di righe che hanno corrispondenze in entrambe le tabelle, sia righe della tabella a sinistra della JOIN che non hanno corrispondenze in quella di destra. Queste ultime vengono riempite con valori null all’occorrenza.

Supponiamo, per esempio, di voler ottenere nome, cognome e voto in italiano degli studenti. La query può utilizzare una LEFT JOIN ed essere simile alla seguente:

SELECT s.nome, s.cognome, v.voto
FROM studenti s
LEFT JOIN voti v
ON s.id = v.id_studente
AND v.materia = 'Italiano';

che risulterà nel seguente dataset:

nomecognomevoto
MarioRossi8
AnnaBianchi9
LucaVerdiNULL
SaraNeri7
MarcoGialliNULL

Si può notare che tutti gli studenti sono presenti, ma le righe relative a Luca Verdi e Marco Gialli hanno valore null nella colonna voto. Questo accade perchè gli studenti in questione non hanno voti in italiano.

RIGHT JOIN

Le RIGHT JOIN permettono di restituire un dataset in cui sono presenti sia combinazioni di righe che hanno corrispondenze in entrambe le tabelle, sia righe della tabella a destra della JOIN che non hanno corrispondenze in quella di sinistra. Queste ultime vengono riempite con valori null all’occorrenza.

Supponiamo, per esempio, di voler ottenere nome, cognome e voto in italiano degli studenti, come nell’esempio precedente. Possiamo utilizzare una RIGHT JOIN invertendo i ruoli delle tabelle studente e voti, come segue:

SELECT s.nome, s.cognome, v.voto
FROM voti v
RIGHT JOIN studenti s
ON s.id = v.id_studente
AND v.materia = 'Italiano';

che avrà gli stessi risultati della LEFT JOIN vista in precedenza.

Conclusione

In questo articolo abbiamo visto cos’è una JOIN in MySQL. Abbiamo definito le principali tipologie e illustrato il loro utilizzo mediante un esempio semplificato. Spero che quest’articolo vi sia stato utile e che vi abbia chiarito come utilizzare le JOIN nei vostri progetti.