INNER JOIN gibt nur die Datensätze zurück, für die ein Übereinstimmung in beiden verbundenen Tabellen gemäß den angegebenen Bedingungen gefunden wurde. Bei der Verwendung von OUTER JOIN (LEFT, RIGHT, FULL) enthält das Ergebnis alle Zeilen aus einer oder beiden Tabellen, selbst wenn es keine Übereinstimmung in der anderen Tabelle gibt.
Wann welchen JOIN verwenden:
Beispiele:
-- 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;
Was gibt LEFT JOIN zurück, wenn die rechte Tabelle leer ist?
Oft wird geantwortet: "LEFT JOIN gibt ein leeres Ergebnis zurück, da keine Übereinstimmungen vorhanden sind". Richtig ist: LEFT JOIN gibt in jedem Fall alle Zeilen aus der linken Tabelle zurück, während die Spalten aus der rechten NULL sein werden.
Beispiel:
-- Tabelle users hat Datensätze, orders ist leer SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- Ergebnis: alle Benutzer, o.amount = NULL
Geschichte
Projekt zur Verkaufsanalyse. Um eine vollständige Liste von Kunden und ihren Bestellungen zu erhalten, wurde INNER JOIN verwendet, wodurch Kunden ohne Bestellungen ausgelassen wurden. Im Bericht gingen "wichtige" Kunden aufgrund ihrer Abwesenheit in der rechten Tabelle verloren. Lösung: LEFT JOIN verwenden.
Geschichte
Plattform zur Aufzeichnung von Mitarbeitern und Abteilungen. Die Verwendung von RIGHT JOIN anstelle von LEFT JOIN führte zu Verwirrung beim Hinzufügen neuer Abteilungen: Einige Mitarbeiter erschienen nicht im Bericht. Grund: Die Reihenfolge der Verbindung wurde verwechselt.
Geschichte
Migration des Datenschemas. Nach Änderungen verwandelte sich einer der JOINs aufgrund eines Tippfehlers in der Verbindungsbedingung in einen CROSS JOIN. Ergebnis – drastischer Anstieg des Abfragevolumens und "Aufblähen" der Daten. Fazit: Immer ON bei Verbindungen angeben und den JOIN-Typ sorgfältig überprüfen.