ホームページ >データベース >mysql チュートリアル >SQL で GROUP BY を使用せずに HAVING を使用できますか?

SQL で GROUP BY を使用せずに HAVING を使用できますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-30 21:15:11857ブラウズ

Can You Use HAVING Without GROUP BY in SQL?

GROUP BY なしの HAVING: SQL の異常

標準 SQL では、GROUP BY 句なしで HAVING 句を使用することは可能ですか?

質問 1: 標準 SQLコンプライアンス

提供されたサンプル クエリ:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)

は SQL 標準に矛盾します。標準に従って、HAVING 句内のすべての列参照は、GROUP BY 句で指定された列のセットに機能的に依存する列を参照する必要があります。ただし、問題のクエリには GROUP BY 句がないため、標準ではありません。

質問 2: MySQL の互換性

クエリは、特定の条件下でのみ MySQL で機能します。ここで、結果の最初の行には NumberOfPages の最大値が含まれます。この動作は、GROUP BY 句がない場合の MySQL の HAVING 句の処理が原因であると考えられます。

質問 3: 標準 SQL の正当性

標準では、GROUP のない HAVING 句は禁止されています。 BY 句を使用すると、どの行が HAVING 条件を満たすかを指定する際に曖昧さが生じるためです。全体として考慮されるテーブル式の場合、集計関数との比較のために特定の行を選択するための論理的根拠はありません。

有効な標準 SQL クエリの例:

このクエリは、GROUP BY 句を使用しない HAVING 句の有効な使用法を示しています。

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);

クエリは常に次のいずれかを返します。値「T」を持つ単一の行 (ページ数が異なる書籍を示す) または空のセット (行なし)。

結論:

サンプル クエリMySQL で動作しますが、標準 SQL には準拠していません。標準 SQL では、あいまいさを避け、論理的な一貫性を確保するために、GROUP BY 句のない HAVING 句の使用を禁止しています。

以上がSQL で GROUP BY を使用せずに HAVING を使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。