Vinzenz Mai: JOIN und WHERE bei vier Tabellen

Beitrag lesen

Hallo,

Aber Du bestätigst mir das Gefühl von leichtem Wirrwarr, was mich bei der Sichtung der ersten Anleitungen beschlich.

Immerhin meine ich jetzt zu wissen, dass das kartesisch Produkt von

erste
a
b
c

und

zweite
d
e

miserable Beispiele. Rouven hat doch ganz ordentliche im Angebot, die man nachvollziehen kann. Hier geht nichts mit Nachvollziehen. Kurz: Diese Beispieltabellen taugen nichts. Es fehlen Spaltennamen. Diese sind hier essentiell.

als erste LEFT JOIN zweite

Nein, hier begehst Du bereits einen Fehler. Da gibt es keinen LEFT JOIN.
Nein, nicht. Wirklich nicht.

Das kartesische Produkt der beiden Tabellen ergibt sich als

*CROSS JOIN*

und nichts anderes. CROSS JOIN, nicht LEFT JOIN, nicht INNER JOIN!
zu

a d
b d
c d
a e
b e
c e

die Leerzeichen als Spaltentrenner sind notwendig.

und als zweite LEFT JOIN erste

Auch hier wieder CROSS JOIN.

a d
a e
b d
b e
c d
c e

Deine zweite Ergebnismenge ist zur ersten äquivalent. Ein JOIN macht keine Aussage über die Anordnung der Datensätze in der Ergebnismenge. Eine ORDER-BY-Klausel kann zu den zwei verschiedenen Reihenfolgen führen, ansonsten ist die Reihenfolge der Datensätze zufällig - und jede beliebige Reihenfolge ist ein gültiges Ergebnis.

ergibt, und die ON - Bedingung dieses Ergebnis dann filtert.

Jein. Ein LEFT JOIN oder ein INNER JOIN ohne Join-Bedingung ist nicht sinnvoll. Dann willst Du einen CROSS JOIN.

Ein INNER JOIN oder ein LEFT JOIN mit Deinen Beispieldaten ist ebenfalls wenig sinnvoll, da die beiden Tabellen keine besonders sinnvolle Verknüpfung zulassen. Nimm anständige Beispieltabellen. Sonst fällt das Verständnis verdammt schwer.

Das würde mir für den Anfang reichen, im Hinterkopf, dass ich das alles auch mit WHERE erreichen könnte, das aber deprecated Syntax ist.

Nein, Du kannst nicht alles mit WHERE erreichen (es sei denn, das DBMS bietet eine proprietäre Syntax für OUTER JOINs über die WHERE-Klausel wie z.B. Oracle oder MS SQL-Server).

Ich hatte Dir dazu gestern den Link zu einem Beispiel gepostet. Es ist ein Riesenunterschied zwischen einem INNER JOIN und einem LEFT JOIN. Es kann einen Riesenunterschied ausmachen, ob Du ein Filterkriterium bei einem LEFT JOIN in der WHERE-Klausel oder in der Join-Bedingung hast:

Beispiel mit Erläuterungen: </archiv/2008/4/t170482/#m1114517>

Freundliche Grüße

Vinzenz