title image


Smiley Re: unterschied zwischen left join / innerjoin
Ein INNER JOIN selektiert aus den angegebenen Tabellen diejenigen Datensätze, für die die Bedinung hinter ON zutrifft. Es kann aber sein, dass in einer der Tabellen gar kein passender Datensatz existiert, z.B. eine Rechnung, die noch keine Rechnungspositionen hat. Der INNER JOIN würde hier keinen Datensatz aus den beiden Tabellen selektieren.



Am besten kann man das an einem Beispiel erklären: Wir haben eine Rechnung mit der Nr. 42, aber keine Rechnungspositionen hierzu. Die folgende Anweisung liefert eine leere Ergebnismenge:



SELECT * FROM rechnung AS r INNER JOIN rechnpos AS p ON r.nr = p.rechn_nr WHERE r.nr = 42



Wenn wir die Rechnung trotzdem haben möchten, obwohl hierzu keine Positionen existieren, benötigen wir ein LEFT [OUTER] JOIN. Beispiel:



SELECT * FROM rechnung AS r LEFT JOIN rechnpos AS p ON r.nr = p.rechn_nr WHERE r.nr = 42



Dies liefert genau die eine Rechnung und NULL für die Felder der Rechnungspositionen (NULL, weil hier eben keine Datensätze existieren).



Man könnte die beiden JOINs in etwa so umschreiben:



INNER JOIN: "Gib mir alle Datensätze aus den beiden Tabellen, für die die Verknüpfungsbedingung zutrifft."



[LEFT|RIGHT] OUTER JOIN: "Gib mir alle Datensätze aus den beiden Tabellen, für die die Verknüpfungsbedingung zutrifft und alle Datensätze aus der übergeordneten Tabelle, für die keine Datensätze in der untergeordneten Tabelle existieren."

Meine Microsite || SQL-Tips.de || D-3 (2007/08) / AI-29 (2006)


geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: