SQL SELECT语句如何工作?

时间:2018-08-29 16:07:52

标签: sql

我创建了一个表,其中ID为主键,名字,姓氏,电子邮件为字段。我发出了以下查询:

 "SELECT email,COUNT(email) FROM mytable;"

结果具有电子邮件的第一个值,即来自第一个记录的值和“电子邮件”列中的值的总数。为什么没有显示来自不同记录的电子邮件的所有不同值?

1 个答案:

答案 0 :(得分:1)

https://dev.mysql.com/doc/refman/8.0/en/group-by-handling.html说:

  

没有GROUP BY,只有一个组,并且不确定为该组选择哪个名称值。

与任何分组查询一样,COUNT(*)返回组中的行数,并将结果减少到每组一行。

但是由于您没有任何GROUP BY子句,因此整个表被视为一个大组,并且结果仅返回一行。

email列返回组中的电子邮件值之一。从技术上讲,该值是从组中的任一行中任意选择的。

实际上,MySQL的实现从从组中读取的第一行中选择值,其顺序取决于用来扫描表的索引。尽管没有记录选择第一行的行为,并且他们也不保证在每个版本中都采用相同的行为。

最好避免依赖于返回任意的,与实现相关的值的查询。它使您的代码难以维护,因为如果您升级MySQL并更改其未记录的行为,则存在更改风险。

为了防止您进行此类任意查询,较新版本的MySQL强制实施称为ONLY_FULL_GROUP_BY的SQL模式。该选项使运行显示的查询成为错误。就其价值而言,查询在大多数其他品牌的SQL数据库中已经是一个错误。

相关问题