Maison >base de données >tutoriel mysql >Pouvez-vous utiliser HAVING sans GROUP BY dans SQL ?
En SQL standard, est-il possible d'utiliser une clause HAVING sans clause GROUP BY ?
Question 1 : Conformité SQL standard
L'échantillon fourni requête :
SELECT * FROM Book HAVING NumberOfPages = MAX(NumberOfPages)
contredit la norme SQL. Selon la norme, toutes les références de colonnes dans la clause HAVING doivent faire référence à des colonnes fonctionnellement dépendantes de l'ensemble de colonnes spécifié dans la clause GROUP BY. Cependant, la requête en question ne contient pas de clause GROUP BY, ce qui la rend non standard.
Question 2 : Compatibilité MySQL
La requête ne fonctionne dans MySQL que sous des conditions spécifiques , où la première ligne du résultat contient la valeur maximale pour NumberOfPages. Ce comportement est probablement dû à la gestion par MySQL des clauses HAVING en l'absence de clauses GROUP BY.
Question 3 : Justification SQL standard
La norme interdit les clauses HAVING sans GROUP Clauses BY car elles créent une ambiguïté dans la spécification des lignes qui satisfont à la condition HAVING. Pour une expression de table considérée dans son ensemble, il n'existe aucune base logique pour sélectionner une ligne spécifique à comparer avec les fonctions d'agrégation.
Exemple de requête SQL standard valide :
Cette requête démontre une utilisation valide d'une clause HAVING sans clause GROUP BY :
SELECT 'T' AS result FROM Book HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
La requête renvoie toujours soit une seule ligne avec la valeur « T » (indiquant des livres avec un nombre de pages différent) ou un ensemble vide (pas de lignes).
Conclusion :
Bien que l'exemple de requête fonctionne dans MySQL, il n'est pas conforme au standard SQL. Le SQL standard empêche l'utilisation de clauses HAVING sans clauses GROUP BY pour éviter toute ambiguïté et garantir une cohérence logique.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!