Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Zusammengesetzter Join

Wenn Sie mehr als zwei Tabellen über Joins verbinden, können Sie mehrere Join-Ausdrücke schachteln.

Auf diese Weise ist es auch möglich, Inner- und Outer Joins innerhalb einer SQL-Anweisung zu kombinieren.


Beispiele

Die folgenden  Beispiele suchen aus den Tabellen KUNDE, AUFTRAG und LEISTUNG Kunden-, Auftrags- und Leistungsnummern heraus. Die Ergebnisse sind abhängig von den verwendeten Joins.


  • Es werden nur Kunden berücksichtigt, für die bereits Aufträge mit zugeordneten Leistungen existieren.

    SELECT k.knr, a.anr, l.lnr 
       FROM (kunde k INNER JOIN auftrag a ON k.knr = a.knr)
                     INNER JOIN leistung l ON a.anr = l.anr
       WHERE k.knr BETWEEN 100 AND 107 ́
       knr          anr          lnr
       102          200            1
       102          200            2
       102          200            3
       105          250           10
       105          250           11
       106          211            4
       106          211            5
       106          211            6
       106          211            7
    
  • Es werden alle Kunden aus der Tabelle KUNDE berücksichtigt, für die Aufträge existieren, unabhängig davon, ob diesen Aufträgen Leistungen zugeordnet sind oder nicht. Der geklammerte Join-Ausdruck ist die dominante Tabelle für den Outer Join. Für fehlende Leistungsnummern wird der NULL-Wert eingetragen.

    SELECT k.knr, a.anr, l.lnr
       FROM (kunde k INNER JOIN auftrag a ON k.knr = a.knr)
                     LEFT OUTER JOIN leistung l ON a.anr = l.anr
       WHERE k.knr BETWEEN 100 AND 107
       knr          anr          lnr
       101          300
       102          200            1
       102          200            2
       102          200            3
       105          250           10
       105          250           11
       105          251
       105          305
       106          210
       106          211            4
       106          211            5
       106          211            6
       106          211            7
    
  • Es werden alle Kunden aus der Tabelle KUNDE berücksichtigt, unabhängig davon, ob Aufträge existieren oder nicht. Aufträge werden auch dann in die Ergebnistabelle aufgenommen, wenn ihnen noch keine Leistungen zugeordnet sind.

    SELECT k.knr, a.anr, l.lnr
       FROM (kunde k LEFT OUTER JOIN auftrag a ON k.knr = a.knr)
                     LEFT OUTER JOIN leistung l ON a.anr = l.anr
       WHERE k.knr BETWEEN 100 AND 107
    

    KUNDE ist die dominante Tabelle des geklammerten Outer Join. Der geklammerte Ausdruck ist die dominante Tabelle des äußeren Outer Join. Für fehlende Artikel- und Leistungsnummern wird der NULL-Wert eingetragen.

    knr          anr          lnr
    100
    101          300
    102          200            1
    102          200            2
    102          200            3
    103
    104
    105          250           10
    105          250           11
    105          251
    105          305
    106          211            4
    106          211            5
    106          211            6
    106          211            7
    106          210  
    107
    

Die folgenden Beispiele beziehen sich auf die Tabellen KUNDE und AUFTRAG. Um die Möglichkeiten eines Outer Join besser darstellen zu können, sollen auch Aufträge ohne Kunden erlaubt sein. Dies bedeutet, dass die Fremdschlüssel-Definitionen für die Tabelle AUFTRAG hier ignoriert werden. Wir nehmen an, dass ein Auftrag mit der Nummer 400 in der Tabelle AUFTRAG enthalten ist, der noch keinem Kunden zugeordnet ist.

  • Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und zugehörige Auftragsnummer herausgesucht, und zwar für alle Kunden, auch solche, die zurzeit keinen Auftrag gestellt haben.

    SELECT kunde.firma, auftrag.anr FROM kunde

           LEFT OUTER JOIN auftrag ON kunde.knr=auftrag.knr

    Kunden, die keinen Auftrag erteilt haben, zum Beispiel der Kunde Jonas Fischladen mit Nummer 104, sind in der Ergebnistabelle enthalten. Für die fehlende Auftragsnummer ist der NULL-Wert eingetragen.

     firma                     anr
     Siemens AG
     Login GmbH                300
     JIKO Gmbh                 200
     Plenzer Trading
     Jonas Fischladen
     Pudelshop Anke            250
     Pudelshop Anke            251
     Pudelshop Anke            305
     Foreign Ltd.              210
     Foreign Ltd.              211
     Externa & Co KG
    
  • Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und Auftragsnummer herausgesucht, und zwar auch für Aufträge, denen kein Kunde zugeordnet ist.

    SELECT kunde.firma, auftrag.anr FROM kunde

           RIGHT OUTER JOIN auftrag ON kunde.knr=auftrag.knr

    Die Auftragsnummer 400 ist ebenfalls in der Ergebnistabelle enthalten. Für den fehlenden Kunden ist der NULL-Wert eingetragen.

    firma              anr
     JIKO Gmbh          200
     Foreign Ltd.       210
     Foreign Ltd.       211
     Pudelshop Anke     250
     Pudelshop Anke     251
     Login GmbH         300
     Pudelshop Anke     305
                        400
    
  • Aus den Tabellen KUNDE und AUFTRAG werden Kundenname und zugehörige Auftragsnummer herausgesucht, wobei sowohl Kunden ohne Auftrag als auch Aufträge ohne Kunden berücksichtigt werden.

    SELECT kunde.firma, auftrag.anr FROM kunde

           FULL OUTER JOIN auftrag ON kunde.knr=auftrag.knr

    Ein fiktiver Auftrag mit der Nummer 400, der noch keinem Kunden zugeordnet ist, ist ebenso in der Ergebnistabelle enthalten wie der Kunde Jonas Fischladen, der zurzeit keinen Auftrag gestellt hat. Für die fehlenden Spaltenwerte werden NULL-Werte eingetragen.

    firma                     anr
     Siemens AG
     Login GmbH                300
     JIKO Gmbh                 200
     Plenzer Trading
     Jonas Fischladen
     Pudelshop Anke            250
     Pudelshop Anke            251
     Pudelshop Anke            305
     Foreign Ltd.              210
     Foreign Ltd.              211
     Externa & Co KG
                               400