SQL Erste Schritte

Verknüpfungen

Der Prozeß, bei dem Daten aus zwei oder mehr Tabellen kombiniert werden, wird als Verknüpfung von Tabellen bezeichnet. Der Datenbankmanager erstellt alle Kombinationen von Zeilen aus den angegebenen Tabellen. Bei jeder Kombination prüft er die Verknüpfungsbedingung. Eine Verknüpfungsbedingung ist eine Suchbedingung, die gewissen Einschränkungen unterliegt. Eine Liste dieser Einschränkungen enthält das Handbuch SQL Reference.

Bitte beachten Sie, daß die von der Verknüpfungsbedingung betroffenen Spalten nicht identisch sein müssen. Es ist jedoch erforderlich, daß die Zeilen miteinander kompatibel sind. Die Verknüpfungsbedingung wird auf dieselbe Weise wie jede andere Suchbedingung ausgewertet, und es gelten dieselben Regeln für Vergleiche.

Wenn Sie keine Verknüpfungsbedingung angeben, werden alle Kombinationen der Zeilen aus den Tabellen, die in der Klausel FROM aufgelistet sind, zurückgegeben, selbst dann, wenn die Zeilen überhaupt keinen Bezug zueinander aufweisen. Das Ergebnis wird als das übergreifende Produkt der beiden Tabellen bezeichnet.

Die Beispiele in diesem Abschnitt basieren auf den beiden folgenden Tabellen. Es handelt sich hierbei um vereinfachte Versionen der Tabellen aus der Beispieldatenbank, die in dieser Form jedoch nicht in der Beispieldatenbank enthalten sind. Mit ihrer Hilfe sollen interessante Aspekte von Verknüpfungen im allgemeinen vorgestellt werden. Die Tabelle SAMP_STAFF listet Namen und Tätigkeitsbeschreibungen der Mitarbeiter auf, die keine freien Mitarbeiter sind. Die Tabelle SAMP_PROJECT enthält die Namen der (festangestellten und freien) Mitarbeiter und die Projekte, die von ihnen bearbeitet werden.

Die Tabellen lauten:

Abbildung 5. Tabelle SAMP_PROJECT

REQTEXT

Abbildung 6. Tabelle SAMP_STAFF

REQTEXT

Das folgende Beispiel erzeugt das übergreifende Produkt der beiden Tabellen. Es wird keine Verknüpfungsbedingung angegeben. Daher sind alle Kombinationen der Zeilen vorhanden:

     SELECT SAMP_PROJECT.NAME, 
            SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT, SAMP_STAFF

Diese Anweisung erzeugt das folgende Ergebnis:

     NAME       PROJ   NAME       JOB     
     ---------- ------ ---------- --------
     Haas       AD3100 Haas       PRES    
     Thompson   PL2100 Haas       PRES    
     Walker     MA2112 Haas       PRES    
     Lutz       MA2111 Haas       PRES    
     Haas       AD3100 Thompson   MANAGER 
     Thompson   PL2100 Thompson   MANAGER 
     Walker     MA2112 Thompson   MANAGER 
     Lutz       MA2111 Thompson   MANAGER 
     Haas       AD3100 Lucchessi  SALESREP
     Thompson   PL2100 Lucchessi  SALESREP
     Walker     MA2112 Lucchessi  SALESREP
     Lutz       MA2111 Lucchessi  SALESREP
     Haas       AD3100 Nicholls   ANALYST 
     Thompson   PL2100 Nicholls   ANALYST 
     Walker     MA2112 Nicholls   ANALYST 
     Lutz       MA2111 Nicholls   ANALYST 

Die beiden Hauptarten von Verknüpfungen sind innere Verknüpfungen und erweiterte Verknüpfungen. Bislang haben alle vorgestellten Beispiele die innere Verknüpfung verwendet. Innere Verknüpfungen behalten nur die Zeilen aus dem übergreifenden Produkt bei, die die Verknüpfungsbedingung erfüllen. Wenn eine Zeile in der einen, nicht jedoch in der anderen Tabelle vorhanden ist, werden die Daten nicht in die Ergebnistabelle übernommen.

Das folgende Beispiel erzeugt die innere Verknüpfung der beiden Tabellen. Die innere Verknüpfung listet die Namen der festangestellten Mitarbeiter auf, die einem Projekt zugeordnet sind:

     SELECT SAMP_PROJECT.NAME, 
            SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT, SAMP_STAFF
        WHERE SAMP_STAFF.NAME = SAMP_PROJECT.NAME

Alternativ können Sie die innere Verknüpfung auch wie folgt angeben:

     SELECT SAMP_PROJECT.NAME, 
            SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT INNER JOIN SAMP_STAFF
          ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME

Das Ergebnis lautet:

     NAME       PROJ   NAME       JOB     
     ---------- ------ ---------- --------
     Haas       AD3100 Haas       PRES    
     Thompson   PL2100 Thompson   MANAGER 

Bitte beachten Sie, daß das Ergebnis der inneren Verknüpfung aus Zeilen besteht, deren Werte für die Spalte NAME in der rechten und der linken Tabelle übereinstimmen. 'Haas' und 'Thompson' sind in der Tabelle SAMP_STAFF mit allen festangestellten Mitarbeitern sowie in der Tabelle SAMP_PROJECT enthalten, die festangestellte und freie Mitarbeiter auflistet, die einem Projekt zugeordnet sind.

Erweiterte Verknüpfungen kombinieren die innere Verknüpfung mit den Zeilen aus der rechten und/oder linken Tabelle, die in der inneren Verknüpfung fehlen. Wenn Sie eine erweiterte Verknüpfung für zwei Tabellen ausführen, nehmen Sie eine willkürliche Zuordnung der einen Tabelle als linke Tabelle und der anderen Tabelle als rechte Tabelle vor. Es gibt drei Arten von erweiterten Verknüpfungen:

  1. Eine linke erweiterte Verknüpfung enthält die innere Verknüpfung sowie die Zeilen aus der linken Tabelle, die nicht in der inneren Verknüpfung enthalten sind.
  2. Eine rechte erweiterte Verknüpfung enthält die innere Verknüpfung sowie die Zeilen aus der rechten Tabelle, die nicht in der inneren Verknüpfung enthalten sind.
  3. Eine volle erweiterte Verknüpfung enthält die innere Verknüpfung sowie die Zeilen sowohl aus der linken als auch aus der rechten Tabelle, die nicht in der inneren Verknüpfung enthalten sind.

Mit der Anweisung SELECT geben Sie die anzuzeigenden Spalten an. In der Klausel FROM geben Sie den Namen der ersten Tabelle gefolgt von den Schlüsselwörtern LEFT OUTER JOIN, RIGHT OUTER JOIN oder FULL OUTER JOIN an. Anschließend müssen Sie die zweite Tabelle gefolgt von dem Schlüsselwort ON angeben. Nach dem Schlüsselwort ON geben Sie mit der Verknüpfungsbedingung eine Beziehung zwischen den zu verknüpfenden Tabellen an.

Im folgenden Beispiel ist die Tabelle SAMP_STAFF als rechte Tabelle und die Tabelle SAMP_PROJECT als linke Tabelle festgelegt. Durch die Verwendung des Schlüsselworts LEFT OUTER JOIN (= linke erweiterte Verknüpfung) werden Name und Projektnummer aller festangestellten und freien Mitarbeiter (aufgeführt in der Tabelle SAMP_PROJECT) und deren Tätigkeitsbezeichnung aufgelistet, sofern es sich um festangestellte Mitarbeiter (aufgeführt in der Tabelle SAMP_STAFF) handelt:

     SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
            SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT LEFT OUTER JOIN SAMP_STAFF
          ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME

Diese Anweisung erzeugt das folgende Ergebnis:

     NAME       PROJ                 NAME       JOB                 
     ---------- -------------------- ---------- --------------------
     Haas       AD3100               Haas       PRES                
     Lutz       MA2111               -          -                   
     Thompson   PL2100               Thompson   MANAGER             
     Walker     MA2112               -          -                   

Das Ergebnis der inneren Verknüpfung sind Zeilen, die in allen Spalten Werte enthalten. Die folgenden Zeilen erfüllen die Verknüpfungsbedingung: 'Haas' und 'Thompson' sind sowohl in der Tabelle SAMP_PROJECT (linke Tabelle) als auch in der Tabelle SAMP_STAFF (rechte Tabelle) enthalten. Bei Zeilen, die die Verknüpfungsbedingung nicht erfüllten, wird in Spalten aus der rechten Tabelle ein Nullwert angezeigt: 'Lutz' und 'Walker' sind freie Mitarbeiter, die in der Tabelle SAMP_PROJECT und nicht in der Tabelle SAMP_STAFF enthalten sind. Bitte beachten Sie, daß die Ergebnismenge alle Zeilen aus der linken Tabelle enthält.

Im nächsten Beispiel wird SAMP_STAFF als rechte Tabelle und SAMP_PROJECT als linke Tabelle festgelegt. Durch die Verwendung des Schlüsselworts RIGHT OUTER JOIN (= rechte erweiterte Verknüpfung) werden Name und Tätigkeitsbezeichnung aller festangestellten Mitarbeiter (aufgeführt in der Tabelle SAMP_STAFF) und deren Projektnummer aufgelistet, sofern sie einem Projekt zugeordnet sind (aufgeführt in der Tabelle SAMP_PROJECT):

     SELECT SAMP_PROJECT.NAME, 
            SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT RIGHT OUTER JOIN SAMP_STAFF
          ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME

Das Ergebnis lautet:

    NAME       PROJ                 NAME       JOB                 
    ---------- -------------------- ---------- --------------------
    Haas       AD3100               Haas       PRES                
    -          -                    Lucchessi  SALESREP            
    -          -                    Nicholls   ANALYST             
    Thompson   PL2100               Thompson   MANAGER             

Wie bei der linken erweiterten Verknüpfung enthält das Ergebnis Zeilen, die in allen Spalten Werte aufweisen. Die folgenden Zeilen erfüllen die Verknüpfungsbedingung: 'Haas' und 'Thompson' sind sowohl in der Tabelle SAMP_PROJECT (linke Tabelle) als auch in der Tabelle SAMP_STAFF (rechte Tabelle) enthalten. Bei Zeilen, die die Verknüpfungsbedingung nicht erfüllten, wird in Spalten aus der rechten Tabelle ein Nullwert angezeigt: 'Lucchessi' und 'Nicholls' sind festangestellte Mitarbeiter, die keinem Projekt zugeordnet sind. Sie werden zwar in der Tabelle SAMP_STAFF, aber nicht in der Tabelle SAMP_PROJECT aufgeführt. Bitte beachten Sie, daß die Ergebnismenge alle Zeilen aus der rechten Tabelle enthält.

Im nächsten Beispiel wird das Schlüsselwort FULL OUTER JOIN (= volle erweiterte Verknüpfung) mit den Tabellen SAMP_PROJECT und SAMP_STAFF verwendet. Es listet die Namen aller festangestellten Mitarbeiter, einschließlich der Mitarbeiter, die keinem Projekt zugeordnet sind, sowie die Namen der freien Mitarbeiter auf:

     SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
            SAMP_STAFF.NAME, SAMP_STAFF.JOB
        FROM SAMP_PROJECT FULL OUTER JOIN SAMP_STAFF
          ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME

Das Ergebnis lautet:

     NAME       PROJ                 NAME       JOB                 
     ---------- -------------------- ---------- --------------------
     Haas       AD3100               Haas       PRES                
     -          -                    Lucchessi  SALESREP            
     -          -                    Nicholls   ANALYST             
     Thompson   PL2100               Thompson   MANAGER             
     Lutz       MA2111               -          -                   
     Walker     MA2112               -          -                   

Dieses Ergebnis enthält die linke erweiterte Verknüpfung, die rechte erweiterte Verknüpfung und die innere Verknüpfung. Alle festangestellten und freien Mitarbeiter werden aufgelistet. Wie bei der linken erweiterten Verknüpfung und der rechten erweiterten Verknüpfung wird für Werte, die die Verknüpfungsbedingung nicht erfüllten, in der entsprechenden Spalte ein Nullwert angezeigt. Die Ergebnismenge enthält alle Zeilen aus den Tabellen SAMP_STAFF und SAMP_PROJECT.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]