首页 > 数据库 > mysql教程 > 为什么 MySQL 允许在 GROUP BY 查询中使用非分组列?

为什么 MySQL 允许在 GROUP BY 查询中使用非分组列?

DDD
发布: 2024-12-10 19:29:12
原创
741 人浏览过

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 扩展的含义

此扩展有几个含义:

  • 性能改进:避免不必要的列排序和分组可以显着提高查询性能。
  • 可维护性:允许非分组列选择可以简化复杂查询的编写和维护。
  • 不确定结果: 但是,如果非分组列在每个列中包含不同的值,则此扩展可能会产生不确定的结果

MySQL 扩展的动机

MySQL 实现此扩展是为了符合 SQL-2003 标准,同时也解决了上面提到的性能和可维护性问题。然而,他们选择了一种简化的方法,允许选择所有列,而不是实现更复杂的机制来识别功能相关的列。

禁用扩展

如果如果需要,用户可以通过将 sql_mode 设置为 ONLY_FULL_GROUP_BY 来禁用该扩展。这将恢复更严格的 SQL-92 行为,确保在聚合查询中无法选择非分组列。

最新进展

2011 年,PostgreSQL 添加了更多此功能的限制性实现,更接近 SQL 标准。 MySQL 对 GROUP BY 的处理在 5.7 (2015) 版本中得到了进一步改进,纳入了识别函数依赖关系的机制,使其与标准更加一致。

以上是为什么 MySQL 允许在 GROUP BY 查询中使用非分组列?的详细内容。更多信息请关注PHP中文网其他相关文章!

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