Maison > base de données > tutoriel mysql > HAVING peut-il être utilisé dans SQL sans clause GROUP BY ?

HAVING peut-il être utilisé dans SQL sans clause GROUP BY ?

Susan Sarandon
Libérer: 2024-12-29 18:12:10
original
1021 Les gens l'ont consulté

Can HAVING be Used in SQL Without a GROUP BY Clause?

Une clause HAVING peut-elle être utilisée sans clause GROUP BY ?

La norme SQL définit des critères spécifiques pour l'utilisation de la clause HAVING, qui incluent faisant référence à des colonnes qui dépendent fonctionnellement de la clause GROUP BY ou de références externes. Cependant, la requête fournie soulève la question de savoir s'il est possible d'utiliser HAVING sans GROUP BY.

Spécifications SQL standard

Selon la norme, une clause HAVING sans une clause GROUP BY n'est pas explicitement interdite. Cependant, la requête présente un comportement discutable :

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)
Copier après la connexion

Cette requête utilise une fonction d'agrégation (MAX) dans la clause HAVING, mais elle n'indique pas quelle ligne spécifique doit être sélectionnée. Par conséquent, son comportement n'est pas strictement défini par la norme.

Implémentation MySQL

MySQL interprète cette requête comme s'il existait une clause GROUP BY implicite, en sélectionnant uniquement la ligne avec la valeur NumberOfPages maximale. Ce comportement n'est pas conforme à la norme.

Raison de la non-conformité à la norme

La norme exige que la clause HAVING opère sur des groupes de lignes définis par la clause GROUP BY. Son objectif est de filtrer les groupes en fonction de valeurs globales. L'utilisation de HAVING sans GROUP BY permettrait de filtrer sur des conditions arbitraires, conduisant potentiellement à des résultats inattendus.

Requête SQL standard valide

Une requête SQL standard valide utilisant HAVING sans GROUP BY serait :

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Copier après la connexion

Cette requête vérifie si la valeur minimale de NumberOfPages est inférieure à la valeur maximale, renvoyant une seule ligne avec le résultat 'T' si vrai et un ensemble vide si faux. Ce comportement est conforme à l'exigence de la norme selon laquelle HAVING s'applique aux fonctions d'agrégation opérant sur l'ensemble de la table.

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