CodeGym /Corsi /SQL SELF /Uso di LEFT JOIN: includere tutti i dati da...

Uso di LEFT JOIN: includere tutti i dati dalla tabella di sinistra

SQL SELF
Livello 11 , Lezione 2
Disponibile

Immagina di avere due tabelle: una lista di studenti e una lista delle loro iscrizioni ai corsi. Non tutti gli studenti sono iscritti ai corsi e vuoi vedere la lista completa di tutti gli studenti, anche quelli che per qualche motivo non hanno ancora scelto un corso. Con INNER JOIN vedresti solo quelli iscritti ai corsi, ma che fine fanno gli altri studenti? Ecco perché esiste LEFT JOIN.

LEFT JOIN restituisce tutte le righe dalla tabella di sinistra (quella che metti per prima nella query) e le righe corrispondenti dalla tabella di destra. Se non ci sono corrispondenze, per le colonne della tabella di destra verrà restituito NULL.

Sintassi di LEFT JOIN

SELECT
    tabella1.colonna1,
    tabella1.colonna2,
    tabella2.colonna1,
    tabella2.colonna2    
FROM 
    tabella1 LEFT JOIN tabella2
ON 
    tabella1.colonna_comune = tabella2.colonna_comune;
  • tabella1 — è la tabella "di sinistra".
  • tabella2 — è la tabella "di destra".
  • colonna_comune — la colonna su cui si fa il join.

Esempio semplice

Se la tabella students è così:

student_id name
1 Otto
2 Anna
3 Peter

E la tabella enrollments è così:

enrollment_id student_id course
1 1 Matematica
2 1 Fisica
3 2 Biologia

Allora la query:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

restituirà:

name course
Otto Matematica
Otto Fisica
Anna Biologia
Peter NULL

Come vedi, nel risultato ci sono tutti gli studenti, anche Peter, che non si è ancora iscritto a nessun corso. Per Peter nella colonna course c'è NULL.

Esempi di utilizzo di LEFT JOIN

Esempio 1: Ottenere la lista di tutti gli studenti e i loro corsi

Supponiamo che tu debba ottenere la lista completa degli studenti insieme ai corsi a cui sono iscritti, se ce ne sono. Se uno studente non ha ancora scelto un corso, anche questo deve essere mostrato.

La stessa query:

SELECT
    students.name, 
    enrollments.course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Risultato:

name course
Otto Matematica
Otto Fisica
Anna Biologia
Peter NULL

Questo è un esempio classico di utilizzo di LEFT JOIN.

Esempio 2: Mostrare prodotti e le loro vendite

Supponiamo di avere due tabelle:

Tabella products, che contiene tutti i prodotti:

product_id product_name
1 Smartphone
2 Tablet
3 Notebook

Tabella sales, che contiene i dati sulle vendite:

sale_id product_id quantity
1 1 5
2 1 3
3 2 2

Ora vuoi vedere tutti i prodotti e la quantità delle loro vendite, inclusi quelli che non sono ancora stati venduti.

SELECT
    products.product_name, 
    SUM(sales.quantity) AS total_sold
FROM 
    products LEFT JOIN sales
    ON 
    products.product_id = sales.product_id
GROUP BY 
    products.product_name;

Risultato:

product_name total_sold
Smartphone 8
Tablet 2
Notebook NULL

Caratteristiche e problemi nell'uso di LEFT JOIN

Serve sempre il NULL?
A volte LEFT JOIN mette NULL dove non te lo aspetti. In questi casi puoi sostituire NULL con un valore più chiaro usando la funzione COALESCE().

SELECT
    students.name, 
    COALESCE(enrollments.course, 'Corso non scelto') AS course
FROM 
    students LEFT JOIN enrollments
ON 
    students.student_id = enrollments.student_id;

Risultato:

name course
Otto Matematica
Otto Fisica
Anna Biologia
Peter Corso non scelto

Doppi indesiderati
Se i dati nella tabella di destra hanno dei duplicati, il risultato della query avrà più righe di quanto ti aspetti. Guarda bene i dati con cui lavori e usa DISTINCT se non vuoi i duplicati.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION