首页 > 数据库 > mysql教程 > MySQL 的'GROUP BY”扩展符合 SQL 标准还是偏差?

MySQL 的'GROUP BY”扩展符合 SQL 标准还是偏差?

Susan Sarandon
发布: 2024-12-07 03:56:10
原创
266 人浏览过

Does MySQL's `GROUP BY` Extension Conform to SQL Standards, or Is It a Deviation?

MySQL 对 GROUP BY 的扩展:遵守还是偏离 SQL 标准?

简介

传统上,在 SQL Server 和其他 RDBMS 中,选择非聚合SQL 标准禁止不属于聚合查询中 GROUP BY 子句的列。然而,在 MySQL 中,这种行为偏离了标准,引发了对 MySQL 遵守情况的质疑。

MySQL 的扩展 GROUP BY

在 1992 年之前的 SQL 版本中,标准确实禁止选择未包含在 GROUP BY 子句中的非聚合字段。然而,从 SQL-2003 开始​​,该标准允许选择功能上依赖于分组列的列。

MySQL 急于实现这一新标准,扩展了 GROUP BY 以允许选择所有列,而不仅仅是那些功能上依赖于分组列的。虽然此扩展符合最新的 SQL 标准,但其实现偏离了预期行为。

MySQL 扩展的后果

允许 SELECT 列表中的所有列,甚至是那些列不依赖于功能,如果非分组依据列在组内包含不同的值,则可能会导致不确定的结果。这种与标准的偏差可能会给用户带来混乱和不可预测的行为。

为了解决这个问题,MySQL 引入了 ONLY_FULL_GROUP_BY sql_mode,它禁用 MySQL 的扩展 GROUP BY 行为并恢复为更严格的 SQL -92 标准。

MySQL 的基本原理和比较其他 RDBMS

MySQL 进行此扩展的基本原理是性能优化。通过允许 SELECT 列表中的所有列,MySQL 可以避免不必要的排序和分组,从而提高性能。

但是,其他 RDBMS,例如 PostgreSQL 和更高版本的 MySQL(5.7)已经实现了更符合标准的方法通过识别函数依赖性并相应地限制 SELECT 列表中的非聚合列。这确保了性能并遵守 SQL 标准。

结论

MySQL 的扩展 GROUP BY 虽然受到 SQL 标准的启发,但偏离了其预期的实现。这种扩展可能会导致不确定的结果,并且需要对函数依赖性有更细致的理解。通过设置 ONLY_FULL_GROUP_BY sql_mode,用户可以恢复到更严格的 SQL-92 行为。 MySQL 的更高版本 (5.7) 改进了 GROUP BY 的处理,以更好地符合标准。

以上是MySQL 的'GROUP BY”扩展符合 SQL 标准还是偏差?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板