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

CONNECT-BY-Klausel (Auszug: Oracle)

Die Connect-By-Klausel ist eine Oracle-spezifische Sonderform der SELECT-Anfrage, die es erm�glicht rekursive (synonym: hierarchische) Abfragen an eine Datenbasis zustellen und damit Baumstrukturen beliebiger Tiefe abzubilden. Im SQL-Standard ist dazu die WITH-Klausel vorgesehen, die mittlerweile auch ORACLE-SQL vollst�ndig umgesetzt hat.

Klassische Anwendungsf�lle f�r rekursive Anfragen sind das Vorgesetzten- bzw. das St�cklisten-Problem. Beide Datenb�ume zeichnen sich durch die unterschiedlich tiefen Zweige aus. Bei den Vorgesetzen z.B. sind abh�ngig von der Position eines Mitarbeiters unterschiedlich viele Vorgesetzen-Ebenen gegeben. W�hrend es f�r einen "normalen" Mitarbeiter vielleicht 5-6 Hierarchieebenen bis zum Chef sind, sind es f�r das mittlere Manamgent nur 2-3. Ein anderes Charakteristikum dieser B�ume ist, dass die maximale Tiefe in der Regel unbekannt ist bzw. varriieren kann. Rekursive Anfragen zeichnen sich dadurch aus, ohne Programm�nderungen in der Lage zu sein, sich ver�ndernden Tiefen anzupassen.

Syntax der CONNECT-BY-Klausel (Oracle)

 CONNECT-BY-Klausel ::=
   START WITH <Spaltenname1 = Konstante>
   CONNECT BY [NOCYCLE] <Spaltenname1> = PRIOR <Spaltenname2> <Bedingung>
   ORDER SIBLINGS BY <Spaltenname1>

Die START-WITH-Komponente gibt den Startpunkt der rekursiven Abfrage an. Das PRIOR in der CONNECT-BY-Klausel kann auch auf der anderen Seite des Gleichheitszeichens stehen und bewirkt eine rekursive Verkn�pfung �ber die Spaltennamen, wobei die PRIOR-Spalte die untergeordnete Spalte ist. Die <Bedingung> kann genutzt werden, um �ste der Abfrage auszuschlie�en (siehe 3.Beispiel). ORDER BY SIBLINGS bewirkt eine Sortierung �ber Tupel auf der gleichen Hierarchiestufe (LEVEL). Level ist eine Pseudospalte, die die Hierarchiestufe abbildet. Die Bedingung kann noch eine zus�tzlicher Einschr�nkung der Spalten enthalten, �ber die rekursiv verkn�pft werden soll (siehe Beispiel 3). NOCYLE schlie�t zyklische, nicht abbrechende Abfragen aus.

Beispiele

St�ckliste
St�ckliste


Im Datenbankschema beschriebt die Teile-Tabelle die Knoten mit dem Prim�rschl�ssel Teilenr und die Strukturtabelle die Kanten mit dem Prim�rschl�ssel OTeil und UTeil. St�cklisten werden z.B. im St�cklisten-Tool der E-Learning-Plattform edb Logo veranschaulicht.

 CREATE TABLE TEILE 
    (TNR         NUMBER (38) PRIMARY KEY,
     ME          VARCHAR2 (10),
     BEZEICHNUNG VARCHAR2 (50));

 CREATE TABLE STRUKTUR 
     (OTEIL      NUMBER (38) NOT NULL,
      UTEIL      NUMBER (38) NOT NULL,
      POSITION   NUMBER (38) NOT NULL,
      MENGE      NUMBER NOT NULL);

 ALTER TABLE STRUKTUR ADD (
  PRIMARY KEY (OTEIL, UTEIL, POSITION));

 ALTER TABLE STRUKTUR ADD (
  FOREIGN KEY (UTEIL)REFERENCES TEILE1 (TNR),
  FOREIGN KEY (OTEIL)REFERENCES TEILE1 (TNR));

1.Beispiel: Ausgabe der CONNECT-BY-Klausel:

 SELECT OTeil, UTEIL, level
 FROM   Struktur
 START  WITH OTeil = 60
 CONNECT BY OTeil = PRIOR UTeil;

gibt alle dem Teil 60 untergeordneten Teile aus mit dem LEVEL, also der Stufe:

OTEILUTEILLEVEL
6021
232
242
60411
41422
41432
41442
41452
60621
62492
62402
40343
4033

Durch den Tausch des Wortes PRIOR wird aus der St�ckliste ein Verwendungsnachweis, in dem nachgesehen wird, in welchen Teilen ein Unterteil verwendet wird.

2.Beispiel: Ausgabe der CONNECT-BY-Klausel mit vertauschtem PRIOR

 SELECT OTeil, UTEIL, level
 FROM   Struktur
 START  WITH UTeil = 2
 CONNECT BY PRIOR OTeil = UTeil;

3.Beispiel: Ausgabe der CONNECT-BY-Klausel mit vertauschtem PRIOR

 SELECT OTeil, UTEIL, level
 FROM   Struktur
 START  WITH UTeil = 2
 CONNECT BY PRIOR OTeil = UTeil AND OTEIL < 60;

Quellen:

  • Quellen/Standards in http://www.wiscorp.com/SQLStandards.html und http://www.jcc.com/sql.htm
  • INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
  • Adams, Ralf: "SQL - Eine Einf�hrung mit vertiefenden Exkursen", Hanser, M�nchen, 2012, ISBN 978-3-446-43200-0
  • Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, M�nchen, 2002, ISBN 3-8273-7021-3
  • Faeskorn-Woyke, Heide/Bertelsmeier, Birgit/Riemer, Petra/Bauer, Elena: "Datenbanksysteme - Theorie und Praxis mit SQL2003, Oracle und MySQL", Pearson Education, M�nchen, 2007, ISBN 978-3-8273-7266-6
  • Kemper, Alfons/Eickler, Andr�: "Datenbanksysteme", Oldenbourg, M�nchen, 2009, 978-3-486-59018-0
  • Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
  • Oracle� Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
  • Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
  • Sieben, J�rgen: "Oracle� SQL - Das umfassende Handbuch", Galileo Press, 2012, ISBN 978-3-8362-1875-7
  • Vossen, Gottfried: "Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme", Oldenbourg, M�nchen, 2008, ISBN 978-3-486-27574-2

Kategorie : SQL, C