ホームページ >データベース >mysql チュートリアル >SQL で GROUP BY を使用せずに HAVING を使用できますか?
標準 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 サイトの他の関連記事を参照してください。