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

Les sous-requêtes (1/3)

  • Permet d'inclure des requêtes à l'intérieur d'une clause WHERE, FROM, SELECT, ...
  • Limitées avec MySQL (existent depuis 4.1)
  • Sous-requêtes retournant une seule valeur :
    -- nom du diplôme suivi par l'étudiant 20000001
    SELECT D.dip_nom FROM Diplome D
      WHERE  D.dip_id = (SELECT E.dip_id FROM Etudiant E
                          WHERE E.etud_num=20000001);
    
     dip_nom 
    ---------
     Licence
    (1 row)
    
    -- liste des étudiants suivant le même diplôme que l'étudiant 20000001
    SELECT E1.* FROM Etudiant E1
     WHERE E1.dip_id = (SELECT D.dip_id FROM Diplome D
                         WHERE D.dip_id = (SELECT E2.dip_id FROM Etudiant E2
                                            WHERE E2.etud_num=20000001));
    
    etud_num | etud_nom | etud_prenom |       etud_adresse        | etud_naissance | dip_id 
    ----------+----------+-------------+---------------------------+----------------+--------
     20000001 | Martin   | Jacques     | Résidence de la pommeraie | 1995-01-01     |      1
     20000002 | Martin   | Pierre      | Résidence de la pommeraie | 1995-10-21     |      1
    (2 rows)