INNER JOIN restituisce solo le righe per le quali è stata trovata una corrispondenza in entrambe le tabelle unite secondo una condizione specificata. Quando si utilizza OUTER JOIN (LEFT, RIGHT, FULL), il risultato include tutte le righe da una o entrambe le tabelle, anche se non ci sono corrispondenze nell'altra tabella.
Quando usare quale JOIN:
Esempi:
-- INNER JOIN SELECT u.id, u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT OUTER JOIN SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- FULL OUTER JOIN SELECT u.id, o.order_id FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Quale risultato restituirà LEFT JOIN se la tabella destra è vuota?
Spesso si risponde: "LEFT JOIN restituirà un risultato vuoto poiché non ci sono corrispondenze". Corretto: LEFT JOIN restituirà comunque tutte le righe dalla tabella sinistra, mentre le colonne dalla destra saranno NULL.
Esempio:
-- La tabella users ha record, orders è vuota SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- Risultato: tutti gli utenti, o.amount = NULL
Storia
Progetto di analisi delle vendite. Per visualizzare l'elenco completo dei clienti e dei loro ordini è stata utilizzata INNER JOIN, escludendo i clienti senza ordini. Nel report sono stati persi clienti "importanti" a causa della loro assenza nella tabella destra. Soluzione: utilizzare LEFT JOIN.
Storia
Piattaforma di gestione dei dipendenti e dei reparti. L'uso di RIGHT JOIN invece di LEFT JOIN ha portato a confusione nell'aggiunta di nuovi reparti: alcuni dipendenti hanno smesso di apparire nel report. Motivo: ordine di unione invertito.
Storia
Migrazione dello schema dati. Dopo le modifiche uno dei JOIN è diventato un CROSS JOIN a causa di un errore di battitura nella condizione di unione. Risultato: aumento improvviso del volume delle selezioni e "gonfiaggio" dei dati. Conclusione: specificare sempre ON durante le unioni e controllare attentamente il tipo di JOIN.