Datenbanken Online Lexikon TH Köln, Campus Gummersbach
Aktuelle Änderungen - Suchen:

Join-Tabelle

Die Join-Tabelle ist die Umsetzung der verschiedenen Join-Arten aus der relationalen Algebra in den SQL-Standard, die z.B. seit Oracle Version 9 implementiert sind. Die Join-Tabelle wird in der FROM-Klausel einer SELECT-Anfrage eingesetzt. Unter SQL gibt es �ber die Join-Arten der relationalen Algebra hinaus noch weitere Join-Typen (siehe Join-Typ-SQL).

Syntax der Join-Tabelle (Auszug)

   <Join-Tabelle> ::= <Kreuzprodukt> | <Qualifizierter-Join> | <NATURAL JOIN>

   <Kreuzprodukt> ::= <Tabellenreferenz> CROSS JOIN <Tabellenreferenz>

   <Qualifizierter-Join>  ::= <Tabellenreferenz> [ <Join-Typ> ] JOIN <Tabellenreferenz>
                            { ON [<Suchbedingung>] | USING ( Spaltenname [ , Spaltenname ]... ) } 

   <NATURAL JOIN> ::= <Tabellenreferenz> NATURAL [ <Join-Typ> ] JOIN <Tabellenreferenz>

   <Join-Typ>     ::= [ INNER ] | { LEFT | RIGHT | FULL } [ [ OUTER ]
  • Das <Kreuzprodukt> entspricht dem kartesischem Produkt aus der relationalen Algebra.
  • Eine <Tabellenreferenz> ist ein Tabellennamen, ein Anfragemengenausdruck oder wieder eine <Join-Tabelle>.
  • Im SQL-Standard ist als rechter Join-Operator statt einer Tabellenreferenz nur ein sog. <Tabellenfaktor> zugelassen, was sich auf einen Tabellennamen oder einen Anfragemengenausdruck beschr�nkt.
  • Bei der ON <Suchbedingung> werden Spalten aus verschiedenen Tabellenreferenzen gleichgesetzt, die nicht gleich hei�en m�ssen, z.B. ON TAB1.Spalte1 = TAB2.Spalte2 oder ON TAB1.Spalte1 > TAB2.Spalte2. Diese Bedingung fungiert als Verkn�pfungsbedingung zwischen den beiden Tabellenreferenzen. Sie kann aber auch noch zus�tzlich durch eine <Suchbedingung> eingeschr�nkt werden (siehe 7.Beispiel).
  • Bei USING werden die Tabellenspalten aufgez�hlt, die in den verwendeten Tabellenreferenzen gleich hei�en. Es wird dabei kein Tabellenalias verwendet, auch nicht in der vorher verwendeten SELECT-Klausel. Using und ON-Bedingung schlie�en sich aus.
  • Der <NATURAL JOIN> entspricht dem nat�rlichen Join? aus der Relationalen Algebra und freundlicherweise taucht hier auch das Wort NATURAL in SQL auf.
  • Der <Join-Typ> kann ein INNER-Join oder ein OUTER-Join sein, wobei der OUTER-Join noch mal in LEFT, RIGHT oder FULL spezifiziert ist (siehe Outer Join? wie in der relationalen Algebra).
  • Der Inner-Join kann weder LEFT noch RIGHT noch FULL sein. Beim Inner-Join k�nnen in der ON-Klausel im Gegensatz zum Natural Join auch verschiedene Spaltennamen eingetragen werden. Der Inner-Join verkn�pft Zeilen aus zwei Tabellen, wenn die zu verkn�pfenden Werte in allen Tabellen vorkommen. Da die <Join-Bedingung> nicht weiter spezifiziert ist, entspricht der Inner-Join dem Theta-Join aus der relationalen Algebra. Der Ausdruck [INNER] kann daher auch wegfallen, ohne das SQL-Resultat im <Join-Typ> zu ver�ndern. Das gilt auch f�r das Wort [OUTER] im Outer-Join.
  • Ein Outer-Join verkn�pft Zeilen aus zwei Tabellen, auch wenn die zu verkn�pfenden Werte nur in einer Tabelle vorkommen. Ein Outer-Joiin kann keine USING-Klausel verwenden..

1. Beispiel:

 /*Alte Schreibweise des kartesischen Produkts in SQL:*/
 SELECT * FROM TAB1, TAB2;

 /*Neue Schreibweise des kartesischen Produkts in SQL mit gleichem Ergebnis:*/
 SELECT * FROM TAB1 CROSS JOIN TAB1;

2. Beispiel: Verschiedene Schreibweisen des Natural-Joins mit gleichem Ergebnis:

 SELECT * FROM TAB1  INNER JOIN TAB2 ON TAB1.SPALTE1= TAB1.SPALTE1;
 SELECT * FROM TAB1  NATURAL JOIN TAB2;
 SELECT * FROM TAB1, TAB2 WHERE TAB1.SPALTE1= TAB1.SPALTE1; -- alte Schreibweise in SQL
 /*Wenn nur das Schl�sselwort NATURAL JOIN verwendet wird, wird verglichen, 
   ob in TAB1 und TAB2 Spalten mit gleichem Namen existieren und diese werden dann automatisch gleichgesetzt.*/

3. Beispiel: Verschiedene Outer-Join-Varianten

 SELECT * FROM  TAB1 RIGHT OUTER JOIN TAB2 ON TAB1.SPALTE1 = TAB2.SPALTE2;
 SELECT * FFROM TAB1 LEFT  OUTER JOIN TAB2 ON TAB1.SPALTE1 = TAB2.SPALTE2;
 SELECT * FFROM TAB1 FULL  OUTER JOIN TAB2 ON TAB1.SPALTE1 = TAB2.SPALTE2;

 SELECT * FROM  TAB1 RIGHT OUTER JOIN TAB2 USING (SPALTE1);   
 /*Die Verwendung von USING setzt voraus, dass TAB1 und TAB2 die SPALTE1 gemeinsam haben.*/

4. Beispiel: Ein Equi-Join

 SELECT * FROM  TAB1 RIGHT OUTER JOIN TAB2 ON TAB1.SPALTE1 = TAB2.SPALTE2;

5. Beispiel: Ein Non-Equi-Join

 SELECT * FROM  TAB1 RIGHT OUTER JOIN TAB2 ON TAB1.SPALTE1 > TAB2.SPALTE2;

6. Beispiel: Ein Self-Join

 SELECT * FROM  TAB2 t1 ,  TAB2 t2 WHERE  t1.SPALTE1 = t2.SPALTE2;
 /* Beim SELF JOIN wird die Tabelle in der FROM-Klausel zweimal aufgelistet, 
    dass Schl�sselwort SELF ist nicht vorgesehen.*/

7. Beispiel: Die ON-Klausel kann auch noch zus�tzlich durch eine <Suchbedingung> eingeschr�nkt werden.

 SELECT * FROM     Abteilungen JOIN Angestellte 
       ON Abteilungen.Abt_Nr = Angestellte.Abt_Nr AND Name = 'Produktion' ;

siehe auch: Join-Typ-SQL, Join

Quellen:

Kategorie: SQL, J