ホームページ >データベース >mysql チュートリアル >MySQL が GROUP BY クエリでグループ化されていない列を許可するのはなぜですか?

MySQL が GROUP BY クエリでグループ化されていない列を許可するのはなぜですか?

DDD
DDDオリジナル
2024-12-10 19:29:12708ブラウズ

Why Does MySQL Allow Non-Grouped Columns in GROUP BY Queries?

MySQL の非標準 GROUP BY 拡張機能: グループ化されていない列の選択を許可する

標準 SQL 構文では、次のような非集計フィールドの選択が禁止されています。集計クエリの GROUP BY 句で明示的にグループ化されていません。ただし、MySQL はこのような選択を許可することでこの標準から逸脱しています。

標準 SQL と MySQL の拡張機能

1992 年まで、標準 SQL 仕様ではこの動作が禁止されており、集計が保証されていました。クエリは、GROUP BY 句でグループ化された集計値または列のみを返しました。

ただし、 SQL-2003 のリリースでは、グループ化列に機能的に依存する列を選択できるように標準が修正されました。ただし、MySQL の拡張機能は、機能の依存関係に関係なく、すべてのカラムの選択を許可することでこの標準を超えています。

MySQL の拡張機能の影響

この拡張機能にはいくつかの影響があります。 :

  • パフォーマンス改善: 不要な列の並べ替えとグループ化を回避すると、クエリのパフォーマンスが大幅に向上します。
  • 保守性: グループ化されていない列の選択を許可すると、複雑なクエリの作成と保守が簡素化されます。
  • Indeterminate Results: ただし、この拡張機能では、次の場合に不確定な結果が発生する可能性があります。グループ化されていないカラムには、各グループ内に異なる値が含まれています。

MySQL の拡張機能に対する動機

MySQL は SQL-2003 標準に準拠するためにこの拡張機能を実装しました。また、前述のパフォーマンスと保守性の問題にも対処します。ただし、機能的に依存する列を識別するためのより複雑なメカニズムを実装するのではなく、すべての列を選択できるようにする簡略化されたアプローチを選択しました。

拡張機能の無効化

If必要に応じて、ユーザーは sql_mode を ONLY_FULL_GROUP_BY に設定することで拡張機能を無効にすることができます。これにより、より厳密な SQL-92 の動作が復元され、グループ化されていない列を集計クエリで選択できなくなります。

最近の開発

2011 年、PostgreSQL はさらにSQL 標準に近い、この機能の制限付き実装。 MySQL の GROUP BY の処理はバージョン 5.7 (2015) でさらに改善され、関数の依存関係を認識するメカニズムが組み込まれ、標準とより緊密に連携しました。

以上がMySQL が GROUP BY クエリでグループ化されていない列を許可するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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