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
Q11 : Afficher le numéro le nom et la note de l'étudiant qui a la meilleure note en informatique.
Q12 : Afficher, pour l'étudiant numéro 5, le nom de l'enseignant qui l'a noté en Histoire.