Menu
 


Le traitement des structures d'arbre


Il est possible de représenter selon le modèle relationnel des listes ou des structures d'arbre. Pour cela, il suffit d'introduire dans la relation un attribut représentant un lien vers l'élément suivant ou le prédécesseur dans la liste ou l'arbre :


Relation(clé, ... , clé du prédécesseur)

C'est le cas dans la table emp où chaque ligne contient un "pointeur" vers le supérieur hiérarchique : n_sup. Chaque employé a un seul supérieur hiérarchique. Par contre, un employé peut être le supérieur hiérarchique de plusieurs employés. Le lien n_sup définit donc une structure d'arbre.


Parcours d'un arbre

En utilisant la clé num et le lien vers le supérieur hiérarchique n_sup, il est possible de parcourir l'arbre hiérarchique implicitement décrit par la table emp. SQL permet d'obtenir comme résultat d'un SELECT les lignes dans l'ordre de parcours de l'arbre (ou de la liste). Pour cela il faut :

Un arbre (ou une liste) sera construit à partir de chaque ligne répondant au prédicat. En l'absence de clause START WITH, un arbre sera construit à partir de chaque ligne.

Exemple : Quels sont toutes les personnes dont CODD est le supérieur hiérarchique (CODD compris).



Niveau : LEVEL

Il est possible d'obtenir pour chaque ligne le niveau correspondant dans l'arbre ou dans la liste, la première ligne sélectionnée étant de niveau 1. Ce niveau s'obtient dans la variable LEVEL, que l'on peut utiliser dans le SELECTcomme résultat. Cette variable peut aussi être présente dans un prédicat.

Exemple : Donner la liste des subordonnés de JOUBERT, avec pour chacun d'eux son niveau.



Sélection de lignes

Clause WHERE

Le prédicat de la clause WHERE permet d'éliminer certaines lignes. Mais le parcours de l'arbre n'est pas interrompu lorsqu'une ligne ne répondant pas au prédicat est rencontrée.

Exemple : Quels sont toutes les personnes dont JOUBERT est le supérieur hiérarchique (JOUBERT compris et CODD non compris).


CODD ne figure pas dans le résultat , mais tous ses subordonnés y figurent.

Clause CONNECT BY

Il est possible de rajouter des conditions dans le CONNECT BY. Lorsque le prédicat du CONNECT BY n'est plus satisfait, le parcours de l'arbre s'arrête.

Exemple : Quels sont toutes les personnes dont JOUBERT est le supérieur hiérarchique (JOUBERT compris et CODD et ses subordonnés non compris).

Dans la requête précédente, nom !='CODD' n'était pas un des prédicats du CONNECT BY alors qu'ici il l'est.


Restrictions

Boucle

SQL détecte les boucles dans les CONNECT BY. Le SELECT est interrompu avec un code d'erreur.

Niveaux

Le parcours descendant d'un arbre nécessite, lorsqu'on a atteint l'extrémité d'une branche, de remonter jusqu'au noeud le plus proche pour parcourir la branche suivante.
Le nombre de niveaux qu'il est ainsi possible de remonter est limité à 256.

Jointure

Un SELECT avec clause CONNECT BY ne doit pas être une jointure.


ATTENTION .....    Exercices