Introduzione ai JOIN in SQL: combinare tabelle

Un JOIN in SQL è una clausola che permette di combinare righe di due o più tabelle basate su una condizione correlata tra loro. I JOIN sono essenziali per l'analisi dei dati, in quanto consentono di interrogare database relazionali complessi in modo efficiente.

I tipi di JOIN in SQL

Esistono diversi tipi di JOIN in SQL, ognuno con il proprio scopo e utilizzo specifico. Ecco i principali:

INNER JOIN

L'INNER JOIN restituisce solo le righe che hanno corrispondenze in entrambe le tabelle. Se non c'è una corrispondenza, la riga non viene inclusa nei risultati.

SELECT t1.colonna1, t2.colonna2 FROM tabella1 t1 INNER JOIN tabella2 t2 ON t1.colonna_comune = t2.colonna_comune;

Supponiamo di avere due tabelle, studenti e corsi. Vogliamo trovare i nomi degli studenti iscritti a un corso specifico:

SELECT studenti.nome, corsi.nome_corso FROM studenti INNER JOIN corsi ON studenti.corso_id = corsi.id;

LEFT JOIN

Il LEFT JOIN restituisce tutte le righe dalla tabella di sinistra (tabella1) e le righe corrispondenti dalla tabella di destra (tabella2). Se non ci sono corrispondenze, i risultati conterranno NULL per le colonne della tabella di destra.

SELECT t1.colonna1, t2.colonna2 FROM tabella1 t1 LEFT JOIN tabella2 t2 ON t1.colonna_comune = t2.colonna_comune;

Troviamo tutti gli studenti e i loro corsi, incluso quelli non iscritti a nessun corso:

SELECT studenti.nome, corsi.nome_corso FROM studenti LEFT JOIN corsi ON studenti.corso_id = corsi.id;

RIGHT JOIN

Il RIGHT JOIN restituisce tutte le righe dalla tabella di destra (tabella2) e le righe corrispondenti dalla tabella di sinistra (tabella1). Se non ci sono corrispondenze, i risultati conterranno NULL per le colonne della tabella di sinistra.

SELECT t1.colonna1, t2.colonna2 FROM tabella1 t1 RIGHT JOIN tabella2 t2 ON t1.colonna_comune = t2.colonna_comune;

Troviamo tutti i corsi e gli studenti iscritti, incluso i corsi senza iscritti:

SELECT studenti.nome, corsi.nome_corso FROM studenti RIGHT JOIN corsi ON studenti.corso_id = corsi.id;

FULL JOIN

Il FULL JOIN restituisce tutte le righe quando c'è una corrispondenza in una delle tabelle. Se non c'è una corrispondenza, i risultati conterranno NULL per le colonne mancanti.

SELECT t1.colonna1, t2.colonna2 FROM tabella1 t1 FULL JOIN tabella2 t2 ON t1.colonna_comune = t2.colonna_comune;

Troviamo tutti gli studenti e tutti i corsi, includendo quelli senza corrispondenze:

SELECT studenti.nome, corsi.nome_corso FROM studenti FULL JOIN corsi ON studenti.corso_id = corsi.id;

CROSS JOIN

Il CROSS JOIN restituisce il prodotto cartesiano delle due tabelle, cioè tutte le combinazioni possibili di righe.

SELECT t1.colonna1, t2.colonna2 FROM tabella1 t1 CROSS JOIN tabella2 t2;

Troviamo tutte le possibili combinazioni di studenti e corsi:

SELECT studenti.nome, corsi.nome_corso FROM studenti CROSS JOIN corsi;

SELF JOIN

Il SELF JOIN è un join di una tabella con sé stessa. Viene utilizzato quando si desidera correlare righe della stessa tabella.

SELECT t1.colonna1, t2.colonna2 FROM tabella t1 JOIN tabella t2 ON t1.colonna_comune = t2.colonna_comune;

Troviamo tutti i dipendenti e i loro manager all'interno della stessa tabella dipendenti:

SELECT dipendenti.nome AS dipendente, manager.nome AS manager FROM dipendenti JOIN dipendenti AS manager ON dipendenti.manager_id = manager.id;

Conclusione

I JOIN in SQL sono strumenti potenti che permettono di combinare dati da diverse tabelle in modo efficiente. Conoscere i diversi tipi di join e sapere quando e come utilizzarli è fondamentale per chi lavora con i database relazionali.