Maison >base de données >tutoriel mysql >Pouvez-vous utiliser HAVING sans GROUP BY dans SQL ?

Pouvez-vous utiliser HAVING sans GROUP BY dans SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 21:15:11840parcourir

Can You Use HAVING Without GROUP BY in SQL?

HAVING sans GROUP BY : Une anomalie 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn