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

La clause HAVING

  • La clause HAVING permet de spécifier une condition de recherche à chaque sous-relation du GROUP BY et autorise l'usage des fonctions d'agrégation dans la condition
  • Exemple :
    SELECT etud_adresse FROM etudiant GROUP BY etud_adresse HAVING COUNT(etud_adresse)>2;
        etud_adresse     
    ---------------------
     Pénitencier fédéral
    (1 row)
  • La requête SELECT col1, aggrégation(col2) FROM R GROUP BY col1 HAVING prédicat(aggrégation(col2)) est exécutée suivant l'algorithme suivant :
      ENTRÉE : une relation R(col1, col2, ...)
      SORTIE : une relation S(col1, valAggrégée)
      VARIABLE
        catégorie[] un tableau de données de même type que col1;
        valAggrégée une valeur issue de la fonction aggrégation;
        cat une valeur de catégorie[];
      DÉBUT
        S := ∅
        catégorie[] := SELECT DISTINCT col1 FROM R;
        POUR CHAQUE cat DANS catégorie[] FAIRE
          valAggrégée := SELECT aggrégation(col2) FROM R WHERE col1=cat;
          SI prédicat(aggrégation(col2)) ALORS
            S := S ∪ (cat, valAggrégée);
          FIN SI
        FIN POUR
        RETOURNER S;
      FIN