Menu |
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.
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 :
CONNECT BY nom_col_1 = PRIOR nom_col_2
Le mot clé PRIOR , accolé à l'une ou l'autre des colonnes, définit le sens du parcours.
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).
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.
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.
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.
SQL détecte les boucles dans les CONNECT BY. Le SELECT est interrompu avec un code d'erreur.
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.
Un SELECT avec clause CONNECT BY ne doit pas être une jointure.
ATTENTION ..... Exercices