L2 Info : Bases de données
 
◃  Ch. 2 Interrogation des données avec SQL (DQL)  ▹
 

Les sous-requêtes (3/3)

  • 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)