ホームページ > データベース > mysql チュートリアル > MySQL の非標準的な GROUP BY 動作は SQL 標準に違反しますか?

MySQL の非標準的な GROUP BY 動作は SQL 標準に違反しますか?

Patricia Arquette
リリース: 2024-12-06 21:36:18
オリジナル
159 人が閲覧しました

Does MySQL's Non-Standard GROUP BY Behavior Violate SQL Standards?

MySQL は非標準の GROUP BY 動作で標準を破っていますか?

はじめに

MySQL の GROUP BY 拡張機能この句では、グループ化に含まれていない列の選択を許可しているため、SQL への準拠に関して疑問が生じています。規格。この記事では、この逸脱の歴史的背景と影響について考察します。

標準

SQL-2003 より前は、非集計の選択を禁止するのが標準的な慣行でした。 GROUP BY 句の一部ではなかった列。この制限により、あいまいなグループ化が排除され、一貫した結果が保証されます。

MySQL の拡張機能

MySQL では、非集計カラムがその一部ではない場合でも選択できるようにする拡張機能が導入されました。 GROUP BY。 MySQL のドキュメントによると、これは不必要な並べ替えやグループ化を回避することでパフォーマンスを最適化するために行われます。ただし、これには注意事項があります。非集計値は不定になる可能性があります。つまり、サーバーは各グループから任意の値を選択できます。

標準 SQL 解釈

SQL-2003 標準では、グループ化列に機能的に依存している場合、または集計列に含まれている場合、選択リスト内で非集計列参照が許可されています。 口論。関数の依存関係により、グループ化カラムの値ごとに、非集計カラムに単一の一意の値が存在することが保証されます。

MySQL の実装

MySQL の拡張機能は、グループ化列に機能的に依存していない列も含めて、すべての列を選択できるようにすることで標準化されます。これにより、非集計値がグループ内で異なる場合に予期しない結果が生じる可能性があります。

MySQL の拡張の結果

MySQL の実装には、主に 2 つの影響があります:

  • パフォーマンスの最適化:この拡張機能は、不必要な並べ替えやグループ化を回避することで、特定の GROUP BY クエリのパフォーマンスを向上させることができます。
  • Indeterminate Results: この拡張機能の欠点は、非集計列が不定の値を返す可能性があることです。一貫性のない結果。

MySQL のアドレス指定逸脱

MySQL ユーザーは、sql_mode を ONLY_FULL_GROUP_BY に設定することで、非標準の動作を無効にすることができます。さらに、標準への準拠を強化するための改良が MySQL 5.7 に導入されました。 PostgreSQL 9.1 は、機能の依存関係要件に厳密に準拠した、より制限的な実装も提供します。

以上がMySQL の非標準的な GROUP BY 動作は SQL 標準に違反しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート