Scegliere il tipo di join corretto
Un metodo decisionale per scegliere il join corretto a partire da un problema descritto a parole
Scegliere il tipo di join corretto è una lezione Coding 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 Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Scegliere il join a partire da un problema descritto a parole
La competenza più importante sui join durante un colloquio non è la sintassi, ma la capacità di tradurre un requisito espresso in linguaggio naturale nel tipo di join corretto. La maggior parte dei candidati sa come funziona ciascun join, ma si blocca quando deve sceglierne uno sotto pressione.
Questa lezione offre un metodo decisionale ripetibile, così potrà individuare il join corretto in pochi secondi.
La domanda fondamentale: quali righe devono sopravvivere?
Ogni scelta del join si riduce a una domanda: quali righe senza corrispondenza di quale lato è necessario mantenere?
- Mantenere solo le righe corrispondenti su entrambi i lati:
INNER JOIN. - Mantenere tutte le righe a sinistra, corrispondenti o meno:
LEFT JOIN. - Mantenere tutte le righe di entrambi i lati:
FULL OUTER JOIN. - Mantenere ogni combinazione:
CROSS JOIN.
Decida prima cosa deve essere mantenuto; il tipo di join seguirà automaticamente.
Parole chiave per INNER JOIN
Espressioni come «clienti che hanno effettuato un ordine», «prodotti che hanno recensioni» o «ordini insieme al relativo cliente» implicano che debba esistere una corrispondenza su entrambi i lati. Si tratta di un INNER JOIN.
Se eliminare le righe senza corrispondenza è accettabile o desiderato, INNER JOIN è la scelta predefinita e più efficiente.
SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;Parole chiave per LEFT JOIN
Espressioni come «tutti i clienti, compresi quelli senza ordini» o «elencare ogni prodotto e il numero di recensioni (zero se non ce ne sono)» indicano che è necessario preservare la tabella a sinistra indipendentemente dalle corrispondenze. Si tratta di un LEFT JOIN.
Le parole rivelatrici sono «tutti», «compresi quelli senza» e «anche se non ce ne sono».
SELECT c.name, COUNT(o.order_id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;Parole chiave per l'anti-join
Espressioni come «clienti che non hanno mai effettuato ordini», «prodotti senza vendite» o «dipendenti senza responsabile» richiedono le righe che non hanno alcuna corrispondenza. Questo è l'anti-join: LEFT JOIN più WHERE right_key IS NULL (oppure NOT EXISTS).
Le parole chiave sono «mai», «nessun» o «senza».
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;Parole chiave per FULL OUTER JOIN
Espressioni come «riconciliare due elenchi e mostrare le voci mancanti da uno dei due lati» o «confrontare i conti del mese scorso con quelli di questo mese, segnalando sia i nuovi sia quelli eliminati» richiedono di mantenere le righe senza corrispondenza di entrambe le tabelle. Si tratta di un FULL OUTER JOIN.
I problemi di riconciliazione e confronto delle differenze sono i casi tipici.
SELECT a.id, b.id
FROM last_month a
FULL OUTER JOIN this_month b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;Parole chiave per CROSS JOIN
Espressioni come «ogni taglia in ogni colore», «una riga per negozio al giorno anche quando non ci sono state vendite» o «tutte le combinazioni possibili» indicano un CROSS JOIN.
Il segnale è «ogni... in ogni» o «tutte le combinazioni», quando tra i due insiemi non esiste alcuna condizione di corrispondenza.
SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;Parole chiave per SELF JOIN
Le espressioni che mettono in relazione una riga con un'altra riga nella stessa tabella, come «ogni dipendente e il relativo responsabile», «coppie di utenti nella stessa città» o «trovare email duplicate», indicano un self join.
L'indizio è che un'entità fa riferimento a un'altra dello stesso tipo o viene confrontata con essa.
SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;Un esempio svolto
Richiesta: «Mostrare ogni prodotto e quante volte è stato ordinato il mese scorso, inclusi i prodotti che non sono mai stati ordinati».
Interpretazione: «ogni prodotto» e «inclusi quelli mai ordinati» significano preservare tutte le righe dei prodotti, quindi collegare la tabella dei prodotti agli ordini con LEFT JOIN e poi applicare COUNT al lato degli ordini (che vale 0 per i prodotti senza corrispondenza, perché COUNT ignora i valori NULL).
SELECT p.name, COUNT(o.order_id) AS times_ordered
FROM products p
LEFT JOIN orders o
ON o.product_id = p.id
AND o.order_date >= DATE '2024-05-01'
GROUP BY p.id, p.name;Un errore comune: filtro in ON o in WHERE
Nella query precedente, il filtro sulla data si trova nella clausola ON, non in WHERE. In questo modo vengono mantenuti i prodotti senza ordini validi.
Se spostasse order_date >= ... in WHERE, le righe NULL dei prodotti senza corrispondenza verrebbero scartate, trasformando silenziosamente il LEFT JOIN in un INNER JOIN e rimuovendo proprio i prodotti che la richiesta chiedeva di mantenere.
-- WRONG: WHERE on the outer table removes unmatched products
-- ...
-- LEFT JOIN orders o ON o.product_id = p.id
-- WHERE o.order_date >= '2024-05-01' <-- becomes an inner joinIl metodo decisionale
Applichi questa lista di controllo a qualsiasi problema sui join descritto a parole:
- La stessa tabella è correlata a se stessa? -> SELF JOIN (e valuti una CTE ricorsiva se la profondità non è limitata).
- Ogni combinazione, senza condizioni? -> CROSS JOIN.
- Solo righe corrispondenti? -> INNER JOIN.
- Mantenere tutto un lato? -> LEFT JOIN.
- Mantenere le righe senza corrispondenza di entrambi i lati? -> FULL OUTER JOIN.
- Righe senza corrispondenza? -> anti-join (LEFT JOIN + IS NULL).
Verifica rapida
Applichi il metodo decisionale a un problema descritto a parole.
Riepilogo: scegliere il tipo di join corretto
Punti chiave:
- Inizi ogni scelta del join chiedendosi quali righe senza corrispondenza devono sopravvivere.
- Colleghi le parole chiave ai tipi di join: «tutti/compresi» -> LEFT, «mai/nessun» -> anti-join, «ogni...in ogni» -> CROSS, «ogni X e il relativo X» -> SELF, riconciliazione -> FULL OUTER.
- Mantenga i filtri dei join esterni nella clausola
ON; un filtro inWHEREpuò trasformare silenziosamente un LEFT JOIN in un INNER JOIN. - Esponga a voce il metodo durante i colloqui: dimostra capacità di ragionamento, non semplice memoria.
Domande Frequenti
La lezione «Scegliere il tipo di join corretto» è gratuita?
Sì — il testo completo di «Scegliere il tipo di join corretto» è 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 Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Scegliere il tipo di join corretto»?
Un metodo decisionale per scegliere il join corretto a partire da un problema descritto a parole Eserciti Coding 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 Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding 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 «Scegliere il tipo di join corretto»?
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 Coding Interview Prep?
Sì. Ogni lezione Coding 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
- CROSS JOIN e prodotti cartesiani
- SELF JOIN per le gerarchie
- Confrontare le righe all'interno di una tabella
- Scegliere il tipo di join corretto