Semantica di RIGHT e FULL OUTER JOIN
Capire quando serve ciascun tipo e come riscrivere RIGHT come LEFT
Semantica di RIGHT e FULL OUTER JOIN è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 2 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.
Oltre LEFT JOIN
Una volta compreso LEFT JOIN, gli intervistatori verificano la sua immagine speculare e l'unione di entrambi: RIGHT JOIN e FULL OUTER JOIN.
- RIGHT JOIN preserva ogni riga della tabella a destra.
- FULL OUTER JOIN preserva le righe senza corrispondenze di entrambe le tabelle.
Questa lezione definisce con precisione ciascun tipo e mostra il trucco di riscrittura molto apprezzato dagli intervistatori: qualsiasi RIGHT JOIN può diventare un LEFT JOIN.
Definizione di RIGHT JOIN
Un RIGHT JOIN (o RIGHT OUTER JOIN) mantiene ogni riga della tabella a destra, quella scritta dopo la parola chiave JOIN. Le righe a destra senza corrispondenze compaiono con NULL nelle colonne della tabella a sinistra.
È l'esatto speculare di LEFT JOIN. Mentre LEFT preserva la tabella indicata per prima, RIGHT preserva quella indicata per seconda.
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c
ON o.customer_id = c.id;
-- keeps ALL customers, even those
-- with no order (Carol -> amount NULL)Le tabelle, di nuovo
Gli stessi dati di prima. Carol (cliente 3) non ha ordini. In questo caso tutte le righe di orders fanno riferimento a un cliente esistente, quindi quando customers è il lato preservato non ci sono ordini orfani.
-- customers orders
-- 1 | Alice 10 | 1 | 50
-- 2 | Bob 11 | 1 | 75
-- 3 | Carol 12 | 2 | 20Riscrivere RIGHT come LEFT
Il punto chiave da ricordare per il colloquio è questo: RIGHT JOIN si usa raramente nella pratica, perché è sempre possibile invertire l'ordine delle tabelle e usare un LEFT JOIN. Le due query seguenti sono logicamente identiche.
Molte guide di stile vietano del tutto RIGHT JOIN, perché leggere da sinistra a destra e preservare sempre la tabella a sinistra è più facile da comprendere.
-- RIGHT JOIN
SELECT c.name, o.amount
FROM orders o
RIGHT JOIN customers c ON o.customer_id = c.id;
-- Equivalent LEFT JOIN (preferred)
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;Definizione di FULL OUTER JOIN
Un FULL OUTER JOIN mantiene le righe senza corrispondenze di entrambe le tabelle. Lo si può considerare come la combinazione di un LEFT JOIN e di un RIGHT JOIN:
- Le coppie con corrispondenza compaiono normalmente.
- Righe a sinistra senza corrispondenze: colonne a destra impostate su NULL.
- Righe a destra senza corrispondenze: colonne a sinistra impostate su NULL.
Risponde alla richiesta "mostrami tutto da entrambi i lati, allineando le corrispondenze".
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o
ON o.customer_id = c.id;Quando FULL OUTER dà il meglio
FULL OUTER JOIN è la scelta ideale per la riconciliazione: confrontare due insiemi di dati che dovrebbero corrispondere, ma potrebbero non farlo.
Immagini una tabella orders e una tabella payments separata. Un FULL OUTER JOIN sull'id dell'ordine fa emergere in un unico risultato sia gli ordini senza pagamento sia i pagamenti senza un ordine corrispondente; i NULL sul lato mancante segnalano ciascun caso.
SELECT o.id AS order_id, p.id AS payment_id
FROM orders o
FULL OUTER JOIN payments p
ON p.order_id = o.id
WHERE o.id IS NULL OR p.id IS NULL;
-- rows where one side is missingConsapevolezza dei dialetti SQL
Un intervistatore potrebbe verificare la portabilità. MySQL non ha la parola chiave FULL OUTER JOIN (fino alla versione 8). Postgres, SQL Server e Oracle la supportano.
In MySQL si può simulare combinando un LEFT JOIN e un RIGHT JOIN con UNION (che rimuove le righe corrispondenti duplicate). Conoscere questa differenza dimostra esperienza concreta.
-- FULL OUTER JOIN emulated in MySQL
SELECT c.name, o.id FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
UNION
SELECT c.name, o.id FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;Panoramica dei quattro tipi di JOIN
Tenga a mente questa tabella. «Preservate» significa che le righe senza corrispondenza rimangono con NULL.
- INNER JOIN: solo le righe corrispondenti. Non viene preservato nulla.
- LEFT JOIN: vengono preservate tutte le righe a sinistra.
- RIGHT JOIN: vengono preservate tutte le righe a destra.
- FULL OUTER JOIN: vengono preservate entrambe le parti.
Ogni domanda sui JOIN esterni si riduce a scegliere quale lato, o quali lati, preservare.
Come scegliere
Scelga il JOIN chiedendosi «quali righe senza corrispondenza devo mantenere?»
- Si vogliono mantenere solo le righe della tabella principale: LEFT JOIN (metta prima la tabella principale).
- Servono entrambi gli insiemi senza corrispondenza per una riconciliazione: FULL OUTER JOIN.
- Contano solo le corrispondenze: INNER JOIN.
Quasi mai si sceglie attivamente RIGHT JOIN: lo si riformula come LEFT JOIN.
Un esempio di riconciliazione
Applichi FULL OUTER JOIN per assegnare un'etichetta allo stato di ogni riga. Un CASE basato sullo schema dei NULL indica quale lato è mancante: è la classica query di audit.
SELECT
COALESCE(o.id, p.order_id) AS ord,
CASE
WHEN p.id IS NULL THEN 'no payment'
WHEN o.id IS NULL THEN 'orphan payment'
ELSE 'matched'
END AS status
FROM orders o
FULL OUTER JOIN payments p ON p.order_id = o.id;Un'idea sbagliata comune
I candidati spesso pensano che FULL OUTER JOIN restituisca il prodotto cartesiano delle righe senza corrispondenza. Non è così. Le righe senza corrispondenza di ciascun lato compaiono esattamente una volta, abbinate a NULL, e non vengono mai moltiplicate tra loro.
Le righe corrispondenti seguono comunque la normale moltiplicazione del JOIN (una riga di output per ogni coppia corrispondente), secondo la stessa regola di fan-out di qualsiasi JOIN.
Verifica rapida
Un intervistatore le chiede di riscrivere una query per un team che vieta RIGHT JOIN.
Riepilogo
RIGHT JOIN preserva la tabella a destra; FULL OUTER JOIN preserva entrambe le tabelle. Qualsiasi RIGHT JOIN può essere riscritto come LEFT JOIN scambiando l'ordine delle tabelle, ed è per questo che i team preferiscono LEFT JOIN.
- FULL OUTER è ideale per riconciliare due dataset.
- MySQL non supporta FULL OUTER; lo si può simulare con LEFT + RIGHT +
UNION. - Scelga il JOIN decidendo quali righe senza corrispondenza mantenere.
- Le righe senza corrispondenza compaiono una volta con NULL, mai come prodotto cartesiano.
Domande Frequenti
La lezione «Semantica di RIGHT e FULL OUTER JOIN» è gratuita?
Sì — il testo completo di «Semantica di RIGHT e FULL OUTER JOIN» è 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 «Semantica di RIGHT e FULL OUTER JOIN»?
Capire quando serve ciascun tipo e come riscrivere RIGHT come LEFT 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 2 di 4.
Quanto tempo richiede la lezione «Semantica di RIGHT e FULL OUTER JOIN»?
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
- LEFT JOIN e conservazione delle righe senza corrispondenza
- Semantica di RIGHT e FULL OUTER JOIN
- Trovare le righe senza corrispondenza (anti-join)
- La trappola di WHERE sui full outer join