SQL INNER JOIN e LEFT JOIN: differenze e casi d’uso spiegati

INNER JOIN e LEFT JOIN in SQL sono operazioni di join frequentemente utilizzate nelle query del database. Queste operazioni, essenziali per l’integrazione dei dati e la personalizzazione dei risultati di ricerca, hanno caratteristiche diverse e vengono impiegate in situazioni differenti. In questo articolo, spiegheremo in dettaglio le differenze tra INNER JOIN e LEFT JOIN, con esempi pratici e casi d’uso appropriati.

Indice

Cos’è INNER JOIN

INNER JOIN è un’operazione SQL utilizzata per unire due o più tabelle. Questa operazione include solo i record che corrispondono alla condizione di join. Ad esempio, se ci sono due tabelle, INNER JOIN restituisce solo le righe che corrispondono sulla base di una chiave comune presente in entrambe le tabelle. Questo permette di estrarre solo i dati correlati. INNER JOIN è molto utile per chiarire le relazioni tra le tabelle ed escludere dati non necessari.

Esempio di utilizzo di INNER JOIN

Mostriamo come utilizzare INNER JOIN con un esempio di SQL. In questo caso, useremo una tabella customers per la gestione delle informazioni sui clienti e una tabella orders per la gestione delle informazioni sugli ordini.

Esempio: Unione di clienti e ordini

La seguente query SQL unisce le informazioni sui clienti con i loro ordini, utilizzando l’ID cliente (customer_id) come chiave comune.

SELECT 
    customers.customer_id,
    customers.customer_name,
    orders.order_id,
    orders.order_date
FROM 
    customers
INNER JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Questa query unisce le righe delle tabelle customers e orders dove la colonna customer_id corrisponde, restituendo un set di risultati che include l’ID cliente, il nome del cliente, l’ID dell’ordine e la data dell’ordine. Con INNER JOIN, i clienti senza ordini e gli ordini senza clienti non verranno inclusi nel set di risultati.

Cos’è LEFT JOIN

LEFT JOIN è un’operazione SQL utilizzata per unire due o più tabelle, includendo tutti i record della tabella a sinistra e aggiungendo i record corrispondenti della tabella a destra che soddisfano la condizione di join. Se non ci sono corrispondenze nella tabella a destra, verranno restituiti valori NULL per quei record. LEFT JOIN viene principalmente utilizzato quando si vuole mantenere tutti i dati della tabella a sinistra, aggiungendo informazioni dalla tabella a destra se disponibili.

Esempio di utilizzo di LEFT JOIN

Mostriamo come utilizzare LEFT JOIN con un esempio di SQL. Useremo nuovamente le tabelle customers e orders come esempio.

Esempio: Unione di clienti e ordini

La seguente query SQL unisce tutti i clienti con i loro ordini, utilizzando l’ID cliente (customer_id) come chiave comune.

SELECT 
    customers.customer_id,
    customers.customer_name,
    orders.order_id,
    orders.order_date
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Questa query restituisce tutti i record della tabella customers e quelli della tabella orders che corrispondono sulla base della colonna customer_id, restituendo l’ID cliente, il nome del cliente, l’ID dell’ordine e la data dell’ordine. Con LEFT JOIN, i clienti che non hanno effettuato ordini verranno inclusi nel set di risultati, con valori NULL per le informazioni sugli ordini.

Differenze tra INNER JOIN e LEFT JOIN

Per capire la differenza tra INNER JOIN e LEFT JOIN, esaminiamo i loro comportamenti con delle rappresentazioni grafiche.

Funzionamento di INNER JOIN

INNER JOIN restituisce solo i record comuni a entrambe le tabelle. Ad esempio, unendo le tabelle customers e orders, verranno incluse solo le righe dove customer_id è presente in entrambe le tabelle.

Tabella customers:
+-------------+----------------+
| customer_id | customer_name  |
+-------------+----------------+
| 1           | Alice          |
| 2           | Bob            |
| 3           | Charlie        |
+-------------+----------------+

Tabella orders:
+-------------+----------+------------+
| order_id    | customer_id | order_date |
+-------------+----------+------------+
| 101         | 1        | 2023-01-10 |
| 102         | 3        | 2023-01-15 |
+-------------+----------+------------+

Risultato INNER JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name  | order_id | order_date |
+-------------+----------------+----------+------------+
| 1           | Alice          | 101      | 2023-01-10 |
| 3           | Charlie        | 102      | 2023-01-15 |
+-------------+----------------+----------+------------+

Funzionamento di LEFT JOIN

LEFT JOIN restituisce tutti i record della tabella a sinistra e aggiunge i record corrispondenti della tabella a destra, se presenti. Se non ci sono corrispondenze, i valori della tabella a destra saranno NULL.

Risultato LEFT JOIN:
+-------------+----------------+----------+------------+
| customer_id | customer_name  | order_id | order_date |
+-------------+----------------+----------+------------+
| 1           | Alice          | 101      | 2023-01-10 |
| 2           | Bob            | NULL     | NULL       |
| 3           | Charlie        | 102      | 2023-01-15 |
+-------------+----------------+----------+------------+

Come si può vedere, INNER JOIN restituisce solo i record comuni a entrambe le tabelle, mentre LEFT JOIN restituisce tutti i record della tabella a sinistra e NULL per quelli senza corrispondenza nella tabella a destra.

Quando utilizzare INNER JOIN e LEFT JOIN

La scelta tra INNER JOIN e LEFT JOIN dipende dai dati richiesti e dallo scopo della query. Esaminiamo le situazioni appropriate per ciascuno.

Quando utilizzare INNER JOIN

INNER JOIN è adatto quando sono necessari solo i dati che sono comuni a entrambe le tabelle. Ecco alcuni esempi di utilizzo:

Recuperare dati corrispondenti tra clienti e ordini

Quando si vogliono ottenere le informazioni sugli ordini per i clienti che hanno effettivamente effettuato un acquisto, si utilizza INNER JOIN. Ad esempio, per recuperare le informazioni dei clienti che hanno acquistato un determinato prodotto.

SELECT 
    customers.customer_name,
    orders.order_id
FROM 
    customers
INNER JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id
WHERE 
    orders.product_id = 123;

Quando utilizzare LEFT JOIN

LEFT JOIN è utile quando si vuole mantenere tutti i dati della tabella a sinistra e aggiungere informazioni dalla tabella a destra, se disponibili. Ecco alcuni esempi di utilizzo:

Visualizzare tutti i clienti con le loro informazioni sugli ordini

LEFT JOIN può essere utilizzato per visualizzare un elenco completo di clienti e controllare se hanno effettuato ordini o meno. Ad esempio, per mostrare l’elenco di tutti i clienti e verificare se ci sono ordini associati.

SELECT 
    customers.customer_name,
    orders.order_id
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id;

Individuare i clienti senza ordini

LEFT JOIN può anche essere utilizzato per identificare i clienti che non hanno effettuato ordini. Utilizzando un controllo NULL, è possibile estrarre i clienti senza ordini.

SELECT 
    customers.customer_name
FROM 
    customers
LEFT JOIN 
    orders
ON 
    customers.customer_id = orders.customer_id
WHERE 
    orders.order_id IS NULL;

In questo modo, INNER JOIN è adatto per estrarre solo i dati comuni, mentre LEFT JOIN consente di mantenere la completezza dei dati nella tabella a sinistra aggiungendo informazioni dalla tabella a destra quando disponibili.

Conclusione

INNER JOIN e LEFT JOIN sono operazioni SQL importanti utilizzate per scopi diversi. INNER JOIN estrae solo i dati comuni tra le tabelle, filtrando strettamente le informazioni correlate. Al contrario, LEFT JOIN mantiene tutti i dati della tabella a sinistra e aggiunge i dati della tabella a destra se corrispondono, prevenendo la perdita di informazioni. Capire le caratteristiche di ogni JOIN e utilizzarle correttamente nei vari casi d’uso consente di creare query di database efficienti.

Indice