> Tech > Répondre aux questions complexes

Répondre aux questions complexes

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Maintenant que le déclencheur sur insertion génère automatiquement les valeurs des colonnes lvl et hierarchy lorsqu'un utilisateur de la base de données ajoute un employé, la table Employees doit disposer de toutes les informations nécessaires pour répondre aux questions complexes et moins complexes présentées précédemment. On peut par exemple utiliser

la requête suivante pour trouver le nom du responsable
le plus senior de l’entreprise :

SELECT *
FROM Employees
WHERE lvl = 0

On peut utiliser ce type de requête pour trouver l’ensemble des employés d’un
niveau donné, et même exploiter un index sur la colonne lvl pour optimiser les
performances des requêtes.
Pour afficher l’ensemble des employés et leurs dépendances hiérarchiques, exécutez
la requête suivante :

SELECT *
FROM Employees
ORDER BY hierarchy

Voyons maintenant des questions plus complexes. Pour visualiser les détails concernant
Robert (ID employé 7) et ses subalternes à  tous les niveaux, exécutez la requête
suivante :

SELECT *
FROM Employees
WHERE hierarchy LIKE (SELECT hierarchy
FROM Employees
WHERE empid = 7) + ‘%’
ORDER BY hierarchy

Pour afficher les détails concernant les subordonnés de Robert (à  l’exception
de lui-même) à  tous les niveaux, on peut exécuter la requête suivante :

SELECT *
FROM Employees
WHERE hierarchy LIKE (SELECT hierarchy
FROM Employees
WHERE empid = 7) + ‘_%’
ORDER BY hierarchy

A première vue, on peut penser que les deux requêtes précédentes sont identiques,
mais ce n’est pas le cas. On remarquer que la première requête filtre les lignes
correspondant au modèle emp_hierarchy LIKE mgr_hierarchy + ‘%’. Etant donné que
le caractère de substitution, le signe « % », peut représenter zéro ou plusieurs
caractères, la hiérarchie correspond au modèle et fait partie du résultat. Dans
la seconde requête cependant, le modèle est légèrement différent : emp_hierarchy
LIKE mgr_hierarchy + ‘_%’. Le caractère de substitution, le trait de soulignement
(_), remplace un seul caractère inconnu, alors que le signe pour cent (%) remplace
n’importe quel nombre de caractères inconnus, y compris zéro. L’association de
ces symboles requiert l’existence d’au moins un caractère de substitution dans
la hiérarchie de l’employé par rapport à  la hiérarchie du manager. Ainsi, les
résultats de la requête ne comprennent par Robert.
La requête suivante renvoie la somme des salaires de Robert et de ses subalternes
à  tous les niveaux :

SELECT sum(salary) AS total_salary
FROM Employees
WHERE hierarchy LIKE (SELECT hierarchy
FROM Employees
WHERE empid = 7) + ‘%’

Pour afficher les détails concernant les employés du bas de l’échelle dépendant
de Janet (ID employé 3), on peut exécuter la requête suivante :

SELECT *
FROM Employees AS M
WHERE hierarchy LIKE (SELECT hierarchy
FROM Employees
WHERE empid = 3) + ‘%’
AND NOT EXISTS(SELECT mgrid FROM Employees AS E
WHERE M.empid = E.mgrid)

Et pour afficher les détails concernant l’ensemble des employés deux niveaux sous
Janet, exécutez la requête suivante :

SELECT *
FROM Employees AS M
WHERE hierarchy LIKE (SELECT hierarchy
FROM Employees
WHERE empid = 3) + ‘%’
AND lvl – (SELECT lvl
FROM Employees
WHERE empid = 3) = 2

ou

SELECT *
FROM Employees AS E JOIN Employees AS M
ON E.hierarchy LIKE M.hierarchy + ‘%’
WHERE M.empid = 13
AND E.lvl – M.lvl = 2

Enfin, pour afficher la chaîne hiérarchique menant à  James (ID employé 14), on
peut exécuter la requête suivante :

SELECT *
FROM Employees
WHERE (SELECT hierarchy
FROM Employees
WHERE empid = 14) LIKE hierarchy + ‘%’
ORDER BY hierarchy

Tableau 1 Changement de hiérarchie après le retrait de Michael
Employé Ancien niveau Nouveau niveau Ancienne chaîne hiérarchique Nouvelle chaîne hiérarchique
Andrew 1 2 .1.2. .1.3.2.
Steven 2 3 .1.2.5. .1.3.2.5.
Michael 2 3 .1.2.6. .1.3.2.6.

Téléchargez cette ressource

Préparer l’entreprise aux technologies interconnectées

Préparer l’entreprise aux technologies interconnectées

Avec la « quatrième révolution industrielle », les environnements hyperconnectés entraînent de nouveaux risques en matière de sécurité. Découvrez, dans ce guide Kaspersky, comment faire face à cette nouvelle ère de vulnérabilité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010