Index   Kapitel 1   Kapitel 2   Kapitel 3   Kapitel 4   Kapitel 5   Kapitel 6   Kapitel 7  
Beispiel - Datenbank  



6 Rekursive Anfragen

Rekursive Anfragen beziehen sich auf rekursive Tabellenbeziehungen. Die Vorgesetzten - Mitarbeiter - Beziehung aus dem Schema "Unternehmen" ist eine solche Beziehung. Rekursive Anfragen, die nicht explizit die Anzahl der Rekursionsschritte definieren, sind in SQL nicht fomulierbar. So ist z.B. die Abfrage "Finde alle (direkten und indirekten) Vorgesetzten eines Mitarbeiters" nicht allgemein in SQL formulierbar. Der direkte Vorgesetzte läßt sich aus dem einfachen Join ableiten. Der direkte Vorgesetzte des Vorgesetzten auf die gleiche Weise, aber die Anzahl der Rekursionsschritte wird nicht für alle Mitarbeiter gleich sein, sonst gäbe es keine Hierarchie. Folglich kann in einem Join genau eine Hierarchieebene abgebildet werden. Ist im Vorhinein die Anzahl der Ebenen bekannt, kann das Gesamtergebnis durch die Vereinigung gebildet werden. Wenn jeder Mitarbeiter höchstens 2 indirekte Vorgesetze haben kann, reicht folgende Anfrage zur Ermittlung aller direkten und indirekten Vorgesetzten eines Mitarbeiters aus (es werden auch die Mitarbeiter ausgegeben, die keinen Vorgestzten haben):

SELECT M.pers_nr, V.pers_nr
FROM Mitarbeiter M, Mitarbeiter V
WHERE M.vnr = V.pers_nr
UNION
SELECT M.pers_nr, V2.pers_nr
FROM Mitarbeiter M, Mitarbeiter V, Mitarbeiter V2
WHERE M.vnr = V.pers_nr    AND
V.vnr = V2.pers_nr
UNION
SELECT pers_nr, NULL
FROM Mitarbeiter
WHERE vnr is NULL

Im allgemeinen Fall, in dem die Anzahl der Ebenen unbekannt ist, ist eine SQL-Anfrage jedoch nicht mehr formulierbar. In solchen Fällen muß man zusätzlich traditionelle Kontrollstrukturen (Schleifen, Verzweigung) nutzen.

  


Index   Kapitel 1   Kapitel 2   Kapitel 3   Kapitel 4   Kapitel 5   Kapitel 6   Kapitel 7  
Beispiel - Datenbank