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.

Database schema

Figure 8.1 : schéma de base de données

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