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, (CURRENT_DATE-Dtnaiss)/365 AS Age FROM ETUDIANT WHERE (CURRENT_DATE-Dtnaiss)/365 =
(SELECTMAX((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);