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:
LEFT JOIN (o LEFT OUTER JOIN)
RIGHT JOIN (o RIGHT OUTER JOIN)
FULL JOIN (o FULL OUTER JOIN)
CROSS JOIN
SELF JOIN
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.
Indice pagine di sql
Indice sql