INNER JOIN retourneert alleen die records waarvoor een overeenkomst is gevonden in beide samengevoegde tabellen op basis van de opgegeven voorwaarde. Bij het gebruik van OUTER JOIN (LEFT, RIGHT, FULL) bevat het resultaat alle rijen uit een of beide tabellen, zelfs als er geen overeenkomsten in de andere tabel zijn.
Wanneer welke JOIN te gebruiken:
Voorbeelden:
-- 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;
Wat voor resultaat geeft een LEFT JOIN als de rechter tabel leeg is?
Vaak antwoorden mensen: "LEFT JOIN geeft een leeg resultaat omdat er geen overeenkomsten zijn". Correct: LEFT JOIN retourneert in ieder geval alle rijen uit de linker tabel, en de kolommen uit de rechter zullen NULL zijn.
Voorbeeld:
-- Tabel users heeft records, orders is leeg SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- Resultaat: alle gebruikers, o.amount = NULL
Verhaal
Een project voor verkoopanalyse. Voor het weergeven van een volledige lijst van klanten en hun bestellingen werd INNER JOIN gebruikt, waardoor klanten zonder bestellingen werden overgeslagen. In het rapport gingen "belangrijke" klanten verloren omdat ze niet in de rechter tabel stonden. Oplossing: gebruik LEFT JOIN.
Verhaal
Een platform voor personeels- en afdelingsadministratie. Het gebruik van RIGHT JOIN in plaats van LEFT JOIN leidde tot verwarring bij het toevoegen van nieuwe afdelingen: sommige medewerkers kwamen niet meer in het rapport voor. Reden - de volgorde van de join was verwisseld.
Verhaal
Migratie van dataskema. Na wijzigingen veranderde een van de JOIN's in een CROSS JOIN door een typefout in de join-voorwaarde. Resultaat - een scherpe stijging van het volume van de selectie en "opblazen" van gegevens. Conclusie: altijd ON aangeven bij joins en zorgvuldig het type JOIN controleren.