SQL JOIN spiegati con esempi (Inner, Left, Right, Full)

  1. Home
  2. Blog
  3. Database e SQL

Database e SQL

SQL JOIN spiegati con esempi (Inner, Left, Right, Full)

Impara i JOIN INNER, LEFT, RIGHT, FULL, CROSS e SELF con due piccole tabelle, query chiare e i risultati esatti.

Di Stack QuoraAggiornato il 29 ott 20268 min di lettura
SQLSQL JOIN spiegaticon esempistackquora.com

Punti chiave

  • INNER JOIN: solo le righe che corrispondono in entrambe le tabelle.
  • LEFT JOIN: tutte le righe di sinistra, con le corrispondenze (NULL se mancano).
  • RIGHT JOIN: tutte le righe di destra, con le corrispondenze.
  • FULL JOIN: tutte le righe di entrambe le tabelle, abbinate quando possibile.
  • Collega tramite chiavi, usa alias di tabella e indicizza le colonne del join.

I database reali non mettono tutto in una sola tabella. I clienti stanno in una tabella e gli ordini in un’altra. Per rispondere a “quali clienti hanno ordinato questo mese?” bisogna combinarle, ed è ciò che fanno i JOIN SQL.

Questa guida è pratica. I join confondono i principianti perché le stesse due tabelle danno risultati diversi a seconda del tipo di join. Con dati piccoli e concreti diventano semplici.

SQL JOIN spiegati: tabelle di esempio

customers

id name
1 Asha
2 Ben
3 Chitra

orders

id customer_id total
101 1 250
102 1 120
103 2 90
104 9 40

Chitra non ha ordini e l’ordine 104 punta a un cliente (9) che non esiste. Questi due casi limite mostrano la differenza tra i tipi di join.

INNER JOIN

INNER JOIN restituisce solo le righe in cui la condizione è vera in entrambe le tabelle. Le righe senza corrispondenza vengono scartate.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;

Risultato: Asha (101), Asha (102), Ben (103). Chitra e l’ordine 104 mancano. Usalo quando contano solo i dati correlati, come gli ordini con i dettagli del cliente. Scrivere solo JOIN equivale a INNER JOIN.

LEFT JOIN

LEFT JOIN mantiene tutte le righe della tabella di sinistra e aggiunge quelle corrispondenti di destra. Dove non c’è corrispondenza, le colonne di destra sono NULL.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Risultato: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Ora Chitra compare.

Consiglio rapido: per trovare i clienti che non hanno mai ordinato, filtra il NULL a destra: WHERE o.id IS NULL restituisce Chitra. I tester lo usano per trovare record orfani o mancanti.

RIGHT JOIN e FULL JOIN

RIGHT JOIN è lo specchio di LEFT JOIN e mantiene tutte le righe di destra. La maggior parte inverte l’ordine delle tabelle e usa LEFT JOIN, più naturale da leggere.

SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

Il risultato include l’ordine 104 con nome cliente NULL. FULL (OUTER) JOIN restituisce tutte le righe di entrambe le tabelle: Chitra senza ordine e l’ordine 104 senza cliente.

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;

PostgreSQL e SQL Server lo supportano. MySQL no: combina LEFT JOIN e RIGHT JOIN con UNION. Per approfondire, il manuale di PostgreSQL ha un chiaro tutorial sui join.

Join Solo righe di sinistra Solo righe di destra Righe corrispondenti
INNER No No Sì
LEFT Sì No Sì
RIGHT No Sì Sì
FULL Sì Sì Sì

CROSS JOIN e SELF JOIN

CROSS JOIN abbina ogni riga di una tabella a ogni riga dell’altra: tre clienti e quattro ordini danno dodici righe. È raro, ma utile per generare combinazioni, come dati di test per ogni taglia e colore.

SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;

SELF JOIN unisce una tabella a se stessa tramite alias, ad esempio per trovare il responsabile di ogni dipendente.

SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

SQL JOIN: errori comuni e consigli sulle prestazioni

  • Dimenticare la clausola ON crea per errore un CROSS JOIN e fa esplodere il numero di righe.
  • Filtrare la tabella di destra nel WHERE dopo un LEFT JOIN lo trasforma in INNER JOIN; metti la condizione nell’ON.
  • Nomi di colonna ambigui: prefissa le colonne con l’alias della tabella.
  • Join su colonne non univoche moltiplica le righe e gonfia i totali.
  • Indicizza le colonne del join, seleziona solo le colonne necessarie e analizza le query lente con EXPLAIN.

Perché i join contano per i tester

Gli ingegneri QA usano i join per verificare che i dati creati da UI o API arrivino correttamente nel database e per trovare record orfani. Leggi insieme la nostra guida al test delle API con Postman (in inglese). Per le basi vedi il tutorial SQL per principianti (in inglese) e, per i nuovi archivi di dati, i database vettoriali (in inglese). Per eseguire un database in locale, consulta il tutorial Docker (in inglese).

Considerazioni finali

I JOIN SQL in una riga: INNER tiene solo le corrispondenze, LEFT tutto a sinistra, RIGHT tutto a destra, FULL tiene tutto. Esercitati con due piccole tabelle finché non prevedi il risultato prima di eseguire la query; poi unisci tre tabelle e combina i join con GROUP BY.

Domande frequenti

Qual è la differenza tra INNER JOIN e LEFT JOIN?

INNER JOIN restituisce solo le righe corrispondenti di entrambe le tabelle. LEFT JOIN restituisce tutte le righe della tabella di sinistra e riempie con NULL le colonne di destra senza corrispondenza.

Quale JOIN SQL è il più veloce?

Nessun tipo è sempre il più veloce. Le prestazioni dipendono da indici, dimensione delle tabelle e piano di esecuzione. Indicizza le colonne del join e controlla il piano.

MySQL supporta FULL OUTER JOIN?

No. In MySQL combina LEFT JOIN e RIGHT JOIN con UNION per ottenere lo stesso risultato.

A cosa serve un SELF JOIN?

Un SELF JOIN confronta righe della stessa tabella, ad esempio per trovare il responsabile di ogni dipendente in un’unica tabella employees.

Perché il mio join restituisce righe duplicate?

I duplicati compaiono quando la colonna del join non è univoca in una delle tabelle. Controlla le chiavi o aggrega i dati prima del join.

Continua a imparare (articoli in inglese)

Lavora con Stack Quora

Ti serve aiuto con test, WordPress o SEO?

Aiutiamo i team a rilasciare software migliore e a far crescere i loro siti. Raccontaci su cosa lavori e ti suggeriremo il prossimo passo.