- sous-requêtes synchronisées : la requête interne reçoit des valeurs de la requête (appelante), une colonne de la table de la requête principale sera référencée dans la sous-requête.
-- liste des diplomes avec plus de 30 étudiants inscrits
SELECT * FROM Diplome D
WHERE 30 < (SELECT COUNT(etud_num) FROM Etudiant E
WHERE E.dip_id = D.dip_id);
- sous-requêtes ramenant plusieurs colonnes
WHERE (col1, ...) [=|!=] ANY (SELECT ...)
WHERE (col1, ...) [=|!=] ALL (SELECT ...)
WHERE (col1, ...) IN (SELECT ...)
WHERE (col1, ...) NOT IN (SELECT ...)
- Exemple :
SELECT * FROM Professeur
WHERE (prof_nom, prof_prenom) = ANY (SELECT prof_nom, prof_prenom
FROM Professeur NATURAL JOIN Diplome);
prof_id | prof_nom | prof_prenom | prof_tel | prof_adresse | prof_statut
---------+----------+-------------+----------+--------------+-------------
1 | Amanton | Laurent | | | MCF
3 | Jay | Véronique | | | MCF
(2 rows)