Erste Seite Zurück Weiter Letzte Seite Übersicht Grafik

OUTER Joins (LEFT, RIGHT, FULL)


Notizen:

LEFT OUTER JOIN, RIGHT OUTER JOIN
Es gibt viele Situationen, in denen ein INNER JOIN zu viele Datensätze „weg blendet“. Denken Sie an alle 1:1-Beziehungen, die Sie in Ihrem Relationenschema vorgesehen haben: Es würden nur noch jene Kopfdatensätze den JOIN „überleben“, zu denen ein Detaildatensatz existiert. Das ist oft, wenn nicht meistens, zu wenig: wir benötigen alle Datensätze der Kopftabelle plus den Detaildaten, wo sie existieren Das bringt uns zu den OUTER JOINS (hier nur noch die ISO-Syntax, denn OUTER JOINs werden in den unterschiedlichen Dialekten unterschiedlich abgebildet, oft sind gar nicht alle implementiert):
SELECT ...FROM Tab1 LEFT [OUTER] JOIN Tab2 ON Tab1.A = Tab2.B
Anm.: Das reservierte Wort „OUTER“ ist so genannte „Noise“: Sie können ohne Veränderung der Bedeutung weg lassen. Die eckigen Klammern gehören übrigens selbstverständlich nicht dazu.
LEFT JOIN: Alle Datensätze der „linken“ Tabelle (das ist die, welche vor dem Schlüsselwort „LEFT JOIN“ erwähnt wird) werden angezeigt; wenn Datensätze der rechten Tabelle dazu passen, werden diese dazu gemischt (= INNER JOIN + „ausgelassene“ Datensätze der linken Tabelle).
RIGHT JOIN: Alle Datensätze der rechten Tabelle (das ist die, welche nach dem Schlüsselwort „RIGHT JOIN“ erwähnt wird) werden angezeigt, wenn Datensätze der linken Tabelle dazu passen, werden diese dazu gemischt (= INNER JOIN + „ausgelassene“ Datensätze der rechten Tabelle).
FULL JOIN: INNER JOIN + „ausgelassene“ Datensätze der linken Tabelle + „ausgelassene“ Datensätze der rechten Tabelle
Bei den OUTER Joins werden in jenen Zeilen, die aus der Kopftabelle stammen, aber keinen entsprechenden Detaildatensatz haben, diejenigen Spalten, die aus der Detailtabelle kommen sollten einfach mit NULL-Werten dargestellt, und zwar unabhängig davon, ob die Detailtabelle in diesen Spalten auch NULL-Werte erlauben würde!
OUTER Joins sind immer sinnvoll anwendbar auf Tabellen, die zu einander in Beziehung stehen (egal, ob 1:1 oder 1:n) und zwar „in 1:n Richtung“. D.h., alle Kopfdatensätze werden dargestellt, Detaildaten werden dazu gemischt, sofern vorhanden. OUTER Joins ermöglichen also „NULL-Löcher“ auf der n-Seite.
Tipp: Ob Sie diese Funktionalität als LEFT oder RIGHT JOIN formulieren wollen, bleibt reine Geschmackssache, der Autor benützt den RIGHT JOIN fast nie.
Noch ein Tipp: Wenn Sie Probleme haben, den FULL OUTER JOIN einzuordnen so wundern Sie sich nicht: er kommt in der Praxis so gut wie nie vor.
Einen Tipp hab' ich noch: Lassen Sie das reservierte Wort „OUTER“ ruhig weg, es gibt keine LEFT INNER JOINs (und auch keine RIGHT oder FULL INNER JOINs).. Lassen Sie das Wort „INNER“ nicht weg: obwohl die meisten Dialekte das erlauben würden und „... Tab1 JOIN Tab2 ON ...“ als INNER JOIN interpretieren würden ist es doch gut, lesen zu können, was da passieren wird.