join

Da INNER JOIN a SQL: collega clienti e ordini

Collega due tabelle senza duplicare i dati con una condizione join chiara e verificabile.

Team SQL.tn9min
Illustrazione delle tabelle dei clienti e degli ordini collegati per formare un risultato comune

Perché i dati vengono separati?

Un database relazionale evita di copiare le stesse informazioni in ogni riga. La tabella clients memorizza il nome e la città di ciascun cliente, mentre la tabella commandes memorizza gli acquisti.

Per visualizzare il nome del cliente accanto a un ordine, SQL deve combinare queste due fonti durante la lettura. Questo è il ruolo di uno join.

Tutte le persone, i ordini e i valori utilizzati in questo articolo sono fittizi e solo a scopo didattico.

La chiave comune rende possibile la relazione

In clients, id_client identifica in modo univoco una persona: questa è la chiave primaria. In commandes lo stesso valore indica chi ha effettuato l'ordine: funge da chiave esterna.

La relazione quindi non dipende dal nome del cliente. Due persone possono avere lo stesso nome, mentre il loro identificatore rimane unico.

Struttura semplificata delle due tabelle
clients
- id_client  INTEGER  PRIMARY KEY
- nom        VARCHAR
- ville      VARCHAR

commandes
- id_commande  INTEGER  PRIMARY KEY
- id_client    INTEGER
- montant      DECIMAL

Scrivi uno INNER JOIN passo dopo passo

La query inizia da clients, aggiunge commandes e quindi descrive la corrispondenza nella clausola ON. INNER JOIN mantiene solo le righe per le quali esiste questa corrispondenza.

Gli alias c e co accorciano i riferimenti. Inoltre evitano qualsiasi ambiguità quando entrambe le tabelle hanno una colonna con lo stesso nome.

  • FROM clients AS c imposta la prima sorgente.
  • INNER JOIN commandes AS co aggiunge la seconda tabella.
  • ON c.id_client = co.id_client specifica quali righe corrispondono.
  • SELECT sceglie solo le colonne utili per il risultato.
Collega ogni ordine al suo cliente
SELECT
  c.nom,
  co.id_commande,
  co.montant
FROM clients AS c
INNER JOIN commandes AS co
  ON c.id_client = co.id_client
ORDER BY co.montant DESC;

Leggi e controlla il risultato

Un ordine associato a un cliente produce una riga nel risultato. Se un cliente ha tre ordini, il suo nome compare tre volte: non si tratta di duplicati casuali, ma di tre fatti diversi.

Prima di aggiungere calcoli, controlla manualmente alcuni identificatori. Uno join corretto deve preservare il significato commerciale delle linee e non moltiplicarne il numero senza motivo.

Reflex Data Analyst: confronta il numero di record restituiti prima e dopo join. Un aumento inaspettato può rivelare una relazione molti-a-molti o una chiave non univoca.

INNER JOIN o LEFT JOIN?

INNER JOIN risponde alla domanda "Quali ordini hanno un cliente corrispondente?" ". Un cliente senza ordine scompare dal risultato.

LEFT JOIN invece mantiene tutti i clienti del tavolo di sinistra. Le colonne dell'ordine sono NULL quando nessun ordine corrisponde. Questa scelta è utile per trovare clienti inattivi.

Mantieni anche i clienti senza ordini
SELECT c.nom, co.id_commande
FROM clients AS c
LEFT JOIN commandes AS co
  ON c.id_client = co.id_client;

Cinque errori comuni con join

Una query può essere eseguita senza errori tecnici ma produce comunque un risultato aziendale errato. La condizione ON merita quindi un'attenta rilettura.

  • Dimentica la clausola ON e crea tutte le combinazioni possibili.
  • Collega il nome del cliente invece del suo ID stabile.
  • Confondere id_client e id_commande.
  • Utilizza INNER JOIN mentre le righe senza corrispondenza dovrebbero essere conservate.
  • Selezionando tutte le colonne con * e rendendo difficile la verifica del risultato.

Il metodo per ricordare

Identificare innanzitutto la domanda aziendale, quindi la tabella che rappresenta ciascun oggetto. Quindi individua la chiave primaria e la chiave esterna, scrivi la condizione ON e controlla alcune righe.

Quando questo risultato è affidabile, puoi aggiungere un filtro, un ordinamento o un'aggregazione. L'esercizio ordini-clienti consente di applicare immediatamente questo metodo.

Metti in pratica questa guida.

Apri l’esercizio collegato, esegui la query e confronta il risultato atteso.

Inizia l’esercizio