Torna all'elenco degli articoli Articoli
Tempo di lettura: 7 minuti

Che cos'è il LEFT JOIN in SQL?

Scoprite i dettagli della LEFT JOIN, uno dei tipi di JOIN più comuni in SQL.

L'SQL si occupa principalmente di ottenere dati dai database. Molto spesso è necessario combinare i dati provenienti da più tabelle del database. È qui che entrano in gioco le JOIN.

Il LEFT JOIN è uno dei tipi di JOIN che probabilmente utilizzerete molto spesso. In questo articolo spiegherò la sintassi della JOIN SINISTRA e il suo funzionamento con diversi esempi e illustrazioni.

JOIN in SQL

In SQL, si utilizza JOIN per combinare i dati di due tabelle in base a una colonna con valori corrispondenti. Ad esempio, se si dispone di una tabella con le informazioni sui clienti (ID cliente, nome, cognome, ecc.) e di un'altra tabella con i dati degli ordini per un periodo specifico (ID ordine, data, ID cliente, ID prodotto, ecc.), è possibile unire queste due tabelle in base alle colonne che memorizzano i numeri di ID cliente. In questo modo si otterranno i dettagli dell'ordine e del cliente per ogni cliente.

Tuttavia, è importante sapere che in SQL esistono diversi tipi di JOIN. È necessario scegliere quella giusta in base alle righe che si desidera mantenere nell'insieme dei risultati. Se si è interessati ai clienti che hanno effettuato ordini solo in un determinato periodo di tempo, si utilizzerà una semplice JOIN (chiamata anche INNER JOIN). Questo tipo di JOIN SQL mantiene solo le righe presenti in entrambe le tabelle; nel nostro caso, si vedrà una riga nel set di risultati solo se l'ID del cliente è presente nella tabella customers e nella tabella orders tabella.

Ci sono casi in cui si desidera conservare le righe della prima tabella che non hanno i record corrispondenti nella seconda tabella. Ad esempio, è possibile che si vogliano visualizzare le informazioni relative a tutti i clienti presenti nell'insieme dei risultati, anche se non hanno effettuato ordini in un determinato periodo di tempo. In questo caso, si utilizzerà una LEFT JOIN, che combina i dati di due tabelle in modo che tutte le righe della tabella di sinistra (la prima) siano incluse nel risultato.

Questo è il tipo di JOIN su cui ci concentreremo in questo articolo. Se non siete sicuri di quale tipo di JOIN avete bisogno in un caso particolare, date un'occhiata al nostro video tutorial su SQL LEFT, RIGHT e FULL JOIN.

Spiegazione del JOIN SINISTRO

LEFT JOINchiamata anche LEFT OUTER JOIN, restituisce tutti i record della tabella di sinistra (prima) e i record corrispondenti della tabella di destra (seconda). Se non c'è corrispondenza per un record specifico, si ottiene NULLs nelle colonne corrispondenti della tabella di destra. Vediamo come funziona con l'esempio dei clienti e degli ordini di cui sopra.

Ecco le nostre tabelle customers e orders e le tabelle.

customers
idfirst_namelast_name
1SteveBrown
2HelenStewart
3JaneSmith
4JackBond

orders
iddatecustomer_idproduct_idamount
12020-12-20323213.99
22020-12-20312412.45
32020-12-2111889.95
42020-12-224854.60

Per unire queste due tabelle mantenendo tutti i record della tabella customers è possibile utilizzare la seguente query SQL:

SELECT *
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
ORDER BY customers.id;

Esaminiamo la sintassi di LEFT JOIN:

  • SELECT - Iniziate elencando le colonne (da entrambe le tabelle) che volete vedere nel set di risultati (qui selezioniamo tutte le colonne usando *);
  • FROM - Mettete il nome della tabella di sinistra, quella in cui volete conservare tutti i record (ad esempio, il nome della tabella di destra). customers);
  • LEFT JOIN - Scrivete il nome della seconda tabella (destra) (ad es. orders);
  • ON - Utilizzare questa parola chiave per indicare le colonne che verranno utilizzate per unire le tabelle, cioè quelle con i valori corrispondenti. (Qui è id da customers e customer_id da orders).

In questa query, utilizziamo anche ORDER BY per ordinare il risultato in base all'ID del cliente, ma questo è facoltativo.

Dopo aver eseguito questa query, si otterrà la seguente tabella.

customersorders
idfirst_namelast_nameiddatecustomer_idproduct_idamount
1SteveBrown12020-12-2111889.95
2HelenStewart[NULL][NULL][NULL][NULL][NULL]
3JaneSmith32020-12-20323213.99
3JaneSmith32020-12-20312412.45
4JackBond42020-12-224854.60

Guardate l'animazione:

Gif che mostra il funzionamento di LEFT JOIN

Come funziona il LEFT JOIN?

Innanzitutto, il database esamina ogni riga della tabella di sinistra e cerca una corrispondenza nella tabella di destra in base alle colonne correlate. Se c'è una corrispondenza, aggiunge i dati della tabella di destra alla riga corrispondente della tabella di sinistra. Se ci sono più corrispondenze (come nel nostro caso con il cliente #3), si duplica la riga della tabella di sinistra per includere tutti i record della tabella di destra. Se non ci sono corrispondenze, mantiene la riga della tabella di sinistra e inserisce NULL nelle colonne corrispondenti della tabella di destra (cliente #2 nel nostro esempio).

Semplice, non è vero? Potete esercitarvi con le LEFT JOIN in questo corso interattivo di SQL JOINs . Vediamo ora altri esempi di lavoro con le LEFT JOIN.

JOIN SINISTRI SQL in uso

Esempio con i dipendenti

Abbiamo una tabella con employees e vogliamo abbinarla alla tabella che elenca tutti i bonus pagati a gennaio (jan_bonuses).

employees
idfirst_namelast_name
1JoeBiden
2BernieSanders
3PeterButtigieg
4ElizabethWarren
5MichaelBloomberg

jan_bonuses
idemployee_idamount
10113460.00
10222340.00
10341800.00

Vogliamo unire queste tabelle per vedere chi ha ricevuto i bonus a gennaio. Il risultato deve includere tutti i dipendenti, indipendentemente dal fatto che abbiano ricevuto o meno un bonus. Pertanto, utilizzeremo una LEFT JOIN:

SELECT *
FROM employees
LEFT JOIN jan_bonuses
ON employees.id = jan_bonuses.employee_id;
employeesjan_bonuses
idfirst_namelast_nameidemployee_idamount
1JoeBiden10113460.00
2BernieSanders10222340.00
3PeterButtigieg[NULL][NULL][NULL]
4ElizabethWarren10341800.00
5MichaelBloomberg[NULL][NULL][NULL]

Come previsto, il risultato include tutti i dipendenti. Se un dipendente non viene trovato nella tabella con le informazioni sui bonus, le colonne corrispondenti della seconda tabella vengono riempite con i valori NULL.

Volete sapere come funzionano le altre OUTER JOIN? Leggete questa guida illustrata alle OUTER JOIN di SQL per scoprire come le RIGHT OUTER JOIN e le FULL OUTER JOIN differiscono dalle LEFT OUTER JOIN.

Esempio con i Paesi

Nel nostro ultimo esempio, uniremo due tabelle usando LEFT JOIN, ma includeremo solo colonne selezionate nel risultato finale.

Abbiamo un elenco di Paesi con alcune informazioni di base e vogliamo integrarlo con i dati sul PIL del 2019, se disponibili.

countries
idnamepopulationcurrencyarea
201United States330,770,244USD9,525,067
202China1,405,631,120CNY9,596,961
203Japan125,770,000JPY377,975
204Germany83,122,889EUR357,114
205India1,370,521,240INR3,287,263

gdp_2019
rankcountry_idgdp_nominal_MUSD
120121,427,700
220214,342,903
32035,081,770

Nel nostro output non abbiamo bisogno di tutte le informazioni su ciascun paese, ma solo dell'ID del paese, del nome, della popolazione e del PIL nominale per il 2019. Ecco la query che utilizzeremo:

SELECT id, name, population, gdp_nominal_MUSD
FROM countries
LEFT JOIN gdp_2019
ON countries.id = gdp_2019.country_id;
countriesgdp_2019
idnamepopulationgdp_nominal_MUSD
201United States330,770,24421,427,700
202China1,405,631,12014,342,903
203Japan125,770,0005,081,770
204Germany83,122,889[NULL]
205India1,370,521,240[NULL]

La tabella include tre colonne della tabella countries e una colonna della tabella gdp_2019 tabella. Come previsto, LEFT JOIN mantiene tutti i record della prima tabella e inserisce i valori NULL per i record non abbinati.

Si noti che in questa istruzione SELECT abbiamo semplicemente elencato i nomi delle colonne che vogliamo vedere nel risultato. Questo funziona solo se non ci sono colonne con lo stesso nome in entrambe le tabelle. L'approccio più sicuro è quello di specificare la tabella per ogni colonna richiesta, cioè countries.id, countries.name, countries.population, gdp_2019.gdp_nominal_MUSD.

Se avete bisogno di effettuare una LEFT JOIN con più di due tabelle, leggete la mia guida sull'unione a sinistra di più tabelle in SQL.

È ora di fare pratica con la CONGIUNZIONE A SINISTRA!

Avete imparato la sintassi di LEFT JOIN e sapete quando e come usare questo tipo di JOIN in SQL. Siete pronti per il passo successivo: scrivere le vostre query SQL con LEFT JOIN.

Vi consiglio di iniziare con il nostro SQL JOINs che comprende 93 esercizi interattivi su INNER JOIN, OUTER JOIN, JOIN non uguali e altro ancora. Al termine del corso, saprete come scegliere il tipo corretto di JOIN, come unire più tabelle, come unire una tabella con se stessa e come unire tabelle utilizzando operatori condizionali diversi dall'uguaglianza.

Non siete sicuri di poter fare pratica con SQL JOINs online? Date un'occhiata a questo articolo che presenta i migliori approcci per esercitarsi con i diversi tipi di SQL JOINs.

Grazie per aver letto e buon apprendimento!