Nous allons voir dans ce chapitre que parfois nous avons besoin de faire une requête SQL à l’intérieur d’une autre requête SQL. Ce concept est connu sous le nom de sous-requête.
1. Sous-requête indépendante
Supposons que nous aimerions obtenir les données à propos des employés dont le salaire est plus élevé ou égal au salaire moyen de tous les employés de l’entreprise.
SELECT emp.First_name AS firstName, emp.Last_name AS lastName, emp.Salary
FROM Employee AS emp
WHERE emp.Salary >= (
SELECT AVG( e.salary )
FROM Employee AS e
)
On obtient le tableau suivant.
{{h}} |
---|
{{r}} |
2. Sous-requête corrélée
Supposons que nous aimerions obtenir, pour chaque département, les données à propos de l’employé le plus ancien.
SELECT dep.Name as Departement, emp.First_name, emp.Last_name, emp.Start
FROM Employee AS emp, Department AS dep
WHERE emp.Department_ID = dep.ID AND emp.Start = (
SELECT MIN(e.Start)
FROM Employee AS e
WHERE e.Department_ID = emp.Department_ID
)
On obtient le tableau suivant.
{{h}} |
---|
{{r}} |
Récap
On utilise les sous-requêtes lorsqu’une donnée doit être obtenue préalablement.
Dans le premier exemple, on doit d’abord connaître le salaire moyen des employés, ce qui est fait avec la sous-requête suivante :
SELECT AVG( e.salary )
FROM Employee AS e
On parle de sous-requête corrélée lorsque la sous-requête dépend de la requête principale. Dans le deuxième exemple, pour chaque employé, la sous-requête donne la date de début la plus ancienne au sein du département de l’employé courant. La sous-requête dépend donc du département de l’employé courant. Cette dépendance est déclarée comme suit :
e.Department_ID = emp.Department_ID