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.
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.