Unire tre o più tabelle
Concatenare i join e ragionare sui set di risultati intermedi
Unire tre o più tabelle è una lezione SQL Interview Prep gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Interview Prep include 4 lezioni in totale.
I join si concatenano, non si diramano
I problemi reali dei colloqui raramente si fermano a due tabelle. Le verrà chiesto di unirne tre, quattro o anche di più. L'idea chiave che aiuta a fare chiarezza è questa: un join tra più tabelle è semplicemente una sequenza di join tra due tabelle.
Il database unisce le prime due tabelle in un risultato intermedio, poi unisce quel risultato alla terza e così via. Se sa ragionare su un join, può ragionare anche su una catena di join.
Schema a tre tabelle
Estendiamo il nostro esempio con una terza tabella. Ora abbiamo i clienti, i loro ordini e i prodotti a cui fa riferimento ciascun ordine.
customers(id, name)orders(id, customer_id, product_id, amount)products(id, title)
Due relazioni le collegano: orders.customer_id = customers.id e orders.product_id = products.id.
customers(id, name)
orders(id, customer_id, product_id, amount)
products(id, title)La query di base su tre tabelle
Imposti i JOIN uno dopo l'altro. Ogni JOIN ... ON aggiunge una tabella e specifica come collegarla a ciò che lo precede.
La lettura va fatta dall'alto verso il basso: si parte da orders, si collega il cliente corrispondente e poi si collega il prodotto corrispondente. Ogni riga di orders acquisisce un nome e il titolo di un prodotto.
SELECT c.name, p.title, o.amount
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Ragionare per insiemi di risultati intermedi
Il modello mentale che semplifica i JOIN su più tabelle: dopo ogni JOIN, immagini il risultato intermedio ottenuto fino a quel punto.
- Dopo il join 1: colonne di orders e del cliente.
- Dopo il join 2: quel risultato più le colonne del prodotto.
La clausola ON successiva può fare riferimento a qualsiasi colonna già presente nell'insieme intermedio; per questo l'ordine dei JOIN influisce su ciò che si può scrivere in ogni ON.
Ogni ON vede le tabelle precedenti
Una conseguenza importante è che la clausola ON di un JOIN successivo può fare riferimento a qualsiasi tabella collegata prima, non solo alla tabella che viene aggiunta.
Qui il terzo JOIN si collega a o (orders), che era già nell'ambito. Si potrebbe anche collegare una quarta tabella a c o p, perché entrambe fanno già parte del risultato costruito fino a quel momento.
SELECT c.name, p.title, w.region
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id
JOIN warehouses w ON w.id = o.warehouse_id; -- refers to oParta dalla tabella centrale
Un consiglio pratico per i colloqui dal vivo: inizi la clausola FROM con la tabella dei fatti / tabella centrale (di solito quella al centro delle relazioni), quindi si sposti verso l'esterno, in direzione delle tabelle di ricerca.
Orders si trova al centro e contiene chiavi esterne sia verso customers sia verso products; iniziare da lì mantiene quindi semplici tutte le clausole ON e consente di fare riferimento solo a tabelle già introdotte.
-- orders is central: it links to both sides
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_idIl fan-out si accumula lungo le catene
Tutto ciò che ha imparato sul fan-out continua a valere, e il suo effetto si somma. Se ogni ordine ha molti articoli e ogni articolo ha molte righe fiscali, il numero di righe si moltiplica a ogni passaggio.
Quando un'aggregazione sembra troppo grande in una query con più JOIN, sospetti un fan-out introdotto da uno dei JOIN intermedi e verifichi individualmente la granularità di ogni JOIN.
-- rows = orders * items_per_order * tax_rows_per_item
SELECT o.id
FROM orders o
JOIN order_items i ON i.order_id = o.id
JOIN item_taxes t ON t.item_id = i.id;Mescolare i tipi di JOIN in una catena
È possibile combinare JOIN INNER e LEFT nella stessa query, ma l'ordine è importante. Quando un LEFT JOIN introduce dei NULL, un INNER JOIN successivo che fa riferimento a quelle colonne NULL può eliminare le righe preservate.
Qui, se un cliente non ha ordini, il LEFT JOIN lo mantiene con NULL in product_id, ma il successivo INNER JOIN verso products lo elimina nuovamente: è un errore facile da commettere sotto pressione.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
JOIN products p ON p.id = o.product_id;
-- the INNER products join can cancel the LEFT JOINMantenga esterni i JOIN esterni
Per preservare fino alla fine i clienti senza ordini, renda LEFT anche il JOIN successivo. In questo modo i NULL arrivano in sicurezza fino al risultato finale.
Regola pratica: una volta scelto un JOIN esterno, continui a usare JOIN esterni per ogni tabella che dipende dal ramo opzionale.
SELECT c.name, p.title
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
LEFT JOIN products p ON p.id = o.product_id;
-- customers with no orders are now kept (NULL title)Gli alias diventano essenziali su larga scala
Con quattro o cinque tabelle, diverse di esse possono avere nomi di colonne come id, name o created_at. Alias brevi e coerenti evitano le ambiguità e mantengono leggibile la query.
Scelga alias che suggeriscano la tabella (c, o, p) e qualifichi ogni colonna. Gli intervistatori considerano il modo in cui usa gli alias un'indicazione di come scrive SQL in produzione.
SELECT c.id AS customer_id,
o.id AS order_id,
p.id AS product_id,
p.title
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN products p ON p.id = o.product_id;Tabelle ponte per relazioni molti-a-molti
Quando due entità hanno una relazione molti-a-molti, tra loro si trova una terza tabella di collegamento (ponte), attraverso la quale si esegue il JOIN. Students e courses sono collegati tramite enrollments.
Riconoscere che è necessario passare da una tabella ponte è già un segnale che gli intervistatori cercano spesso.
SELECT s.name, c.title
FROM students s
JOIN enrollments e ON e.student_id = s.id
JOIN courses c ON c.id = e.course_id;Verifica rapida
Ragioni su una catena di JOIN misti.
Riepilogo: unire tre o più tabelle
Porti questi concetti al colloquio:
- Un JOIN su più tabelle è una catena di JOIN su due tabelle; ragioni sul risultato intermedio dopo ogni passaggio.
- Una clausola ON successiva può fare riferimento a qualsiasi tabella precedente nella catena.
- Parta dalla tabella centrale e si sposti verso le tabelle di ricerca.
- Il fan-out si accumula attraverso i JOIN; verifichi la granularità a ogni passaggio.
- Un INNER JOIN dopo un LEFT JOIN può annullarne l'effetto; continui a usare JOIN esterni per conservare le righe opzionali.
- Le relazioni molti-a-molti vengono unite tramite una tabella ponte.
Domande Frequenti
La lezione «Unire tre o più tabelle» è gratuita?
Sì — il testo completo di «Unire tre o più tabelle» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Interview Prep, passa a CoddyKit PRO. Il corso SQL Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Unire tre o più tabelle»?
Concatenare i join e ragionare sui set di risultati intermedi Eserciti SQL Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare SQL Interview Prep?
Non è richiesta alcuna esperienza precedente. SQL Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Unire tre o più tabelle»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione SQL Interview Prep?
Sì. Ogni lezione SQL Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Come INNER JOIN abbina le righe
- ON e WHERE nei join
- Espansione dei join e moltiplicazione delle righe
- Unire tre o più tabelle