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
Libérer: 2024-12-30 21:15:11
original
857 Les gens l'ont consulté

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)
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal