SQL : Sous-Interrogations

SELECT imbriqués

Les sous-interrogations, ou SELECT imbriqués, permettent de réaliser des interrogations complexes qui nécessiteraient normalement plusieurs interrogations avec stockage des résultats intermédiaires. Elles se caractérisent par une interrogation (clause SELECT) inclue dans la clause WHERE, la clause HAVING ou la clause SELECT d'une autre interrogation.

- Déterminer le nom le sexe et l'âge de l'étudiant le plus âgé.

SELECT Nometu, Cdsexe, DATEDIFF(CURRENT_DATE,Dtnaiss)/365 AS Age
FROM ETUDIANT
WHERE DATEDIFF(CURRENT_DATE,Dtnaiss)/365 =
  (SELECT MAX(DATEDIFF(CURRENT_DATE,Dtnaiss)/365) FROM ETUDIANT);
Prédicats IN, ANY, ALL, EXISTS

Une sous-interrogation peut retourner un sous-ensemble de zéro à n valeurs. En fonction des conditions que l'on veut exprimer au niveau des valeurs renvoyées par la requête, on peut utiliser les prédicats IN, ANY, ALL ou EXISTS.

Prédicat Utilisation
IN L'opérateur de comparaison est l'égalité et l'opération logique entre les valeurs est OU.
ANY Permet de vérifier si au moins une valeur de la liste satisfait la condition.
ALL Permet de vérifier si la condition est réalisée pour toutes les valeurs de la liste.
EXISTS Si la sous-interrogation renvoie un résultat, la valeur retournée est Vrai sinon la valeur Faux est retournée.

- Afficher les notes de l'étudiant numéro 1 qui sont égales aux notes de l'étudiant numéro 2.

SELECT Note
FROM NOTES
WHERE Numetu=1 AND Note IN
  (SELECT Note FROM NOTES WHERE Numetu=2);

- Afficher les notes de l'étudiant numéro 1 qui sont supérieures aux notes de l'étudiant numéro 2.

SELECT Note
FROM NOTES
WHERE Numetu=1 AND Note > ANY
  (SELECT Note FROM NOTES WHERE Numetu=2);

- Afficher les notes de l'étudiant numéro 1 qui sont inférieures à toutes les notes de l'étudiant numéro 9.

SELECT Note
FROM NOTES
WHERE Numetu=1 AND Note < ALL
 (SELECT Note FROM NOTES WHERE Numetu=9);

- Afficher toutes les informations sur les étudiants qui n'ont aucune note.

SELECT *
FROM ETUDIANT E
WHERE NOT EXISTS
  (SELECT Numetu FROM NOTES WHERE Numetu=E.Numetu);

Tester les exemples

Sommaire SQL

Q11 : Afficher le numéro le nom et la note de l'étudiant qui a la meilleure note en informatique.

Sommaire SQL

Q12 : Afficher, pour l'étudiant numéro 5, le nom de l'enseignant qui l'a noté en Histoire.

Section suivante | Section précédente | Sommaire SQL