L3 Info : SGBD
 
◃  Ch. 10 SQL : DQL (Algèbre relationnel et SQL)  ▹
 

Les sous-requêtes dans WHERE (2/3)

  • Sous-requêtes retournant une valeur sur plusieurs lignes :
  • Obligation d'utiliser un opérateur capable de traiter un ensemble de valeurs
  • Utilisation des opérateurs IN (éventuellement avec NOT)
    WHERE col IN (SELECT ...)
    WHERE col NOT IN (SELECT ...)
    
  • Utilisation des opérateurs de comparaison combinés avec ANY ou ALL
    WHERE col [=|<>|<|<=|>|>=] ANY (SELECT ...)
    Le test réussit si au moins une valeur de l'ensemble retourné le réussit
  • Utilisation des opérateurs de comparaison combinés avec ANY ou ALL
    WHERE col [=|<>|<|<=|>|>=] ALL (SELECT ...)
    Le test réussit si toutes les valeurs de l'ensemble retourné le réussit
  • Exemples :
    SELECT * FROM Etudiant E
       WHERE E.dip_id IN (SELECT D.dip_id FROM Diplome D
                            WHERE LOWER(D.dip_discipline) LIKE '%info%');
     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)
    
    SELECT * FROM Etudiant
      WHERE etud_naissance <= ALL (SELECT etud_naissance FROM Etudiant);
     etud_num | etud_nom | etud_prenom |    etud_adresse     | etud_naissance | dip_id 
    ----------+----------+-------------+---------------------+----------------+--------
     20000003 | Dalton   | Joe         | Pénitencier fédéral | 1865-04-01     |       
    (1 row)