Version: Test
©Raddy 2001

SQL mit Oracle XI                                  zurück

Inner Join über mehrere Tabellen
a-absatz.pcx (280 Byte)

Beispiel

Kunden kaufen Artikel, welche in Aufträgen stehen. Ein Auftrag
kann aus mehreren Artikelpositionen bestehen. Jeder Artikel 
gehört zu genau einer Artikelgruppe. Nun möchte man von jedem
Kunden wissen, welche Artikelgruppen er gekauft hat. 

Wenn wie hier mehr als zwei Tabellen abgefragt werden (also wenn 
hinter dem select-Befehl Spalten aus mehr als zwei Tabellen stehen),
dann muß man folgendermaßen vorgehen:

1. In die select-Zeile schreibt man alle gesuchten Werte, die
    angezeigt werden sollen:

        select kundenname, warengruppenname

2.Dann erstellt man oder besorgt sich das ER-Modell der Datenbank:
   sq11s4p1.pcx (4533 Byte)

3. Wir erstellen die from-Zeile:
    In die "from-Zeile" schreibt man alle Tabellen, aus denen Werte
    in der select-Zeile ausgegeben werden sollen (kunde, warengruppe). 
    Außerdem schreibt man alle Tabellen in diese Zeile, die im 
    ER-Modell zwischen diesen Tabellen stehen:

        select kundenname, artikelgruppenname
        from kunde, auftrag, auftragsposition, artikel, warengruppe

4. Wir erstellen die where-Klausel:
    Nun sucht man die Spalten, die die Beziehungen zwischen diesen 
    Tabellen herstellen. Beispiel: Die Tabellen Kunde und Auftrag sind
    über die Spalte "Kundennummer" verbunden, weil die Kundennummer
    in beiden Tabellen auftaucht. 

    Diese Spalte muß in beiden Tabelle gleich sein, den wir wollen
    ja auch nur die Kombinationen, die wirklich vorhanden sind, und
    nicht die, die theoretisch möglich sind (das wäre das Kreuzprodukt).

    Wir formulieren also die where-Bedingung:

           where kunde.kundennummer = auftrag.kundennummer

     Mit den anderen Entities machen wir das gleiche. Es ergibt
     sich schließlich folgende where-Klausel:

           where kunde.kundennummer = auftrag.kundennummer
           AND  auftrag.auftragsnummer = auftragsposition.auftragsnummer
           AND  auftragsposition.artikelnummer = artikel.artikelnummer
           AND  artikel.gruppennummer = warengruppe.gruppennummer