我正在寻求对此的澄清。我在下面写了两个查询:
我们有一个员工姓名表,其中包含 ID 、姓名、薪水列
1. Select name from employee
where sum(salary) > 1000 ;
2. Select name from employee
where substring_index(name,' ',1) = 'nishant' ;
查询 1 不起作用,但查询 2 起作用。根据我的开发经验,我觉得对此可能的解释是:
sum() 适用于参数中指定的一组值。这里
'salary' 列已传递,因此它必须将所有值相加
柱子。但是在where子句中,记录是一一检查的,
例如检查第一条记录 1 进行测试等等。因此
sum(salary) 将不会被计算,因为它需要访问所有列
值,然后只有它会返回一个值。
查询 2 的工作原理是 substring_index() 作用于单个值,因此这里它作用于提供给它的值。
你能验证一下我的理解吗?
无法使用的原因SUM()
in the WHERE
子句是子句的评估顺序。
FROM
告诉您从哪里读取行。当行从磁盘读取到内存时,会检查它们的WHERE
状况。 (实际上在很多情况下,失败的行WHERE
子句甚至不会从磁盘读取。 “条件”的正式名称为谓词查询执行引擎使用一些谓词来决定从基表中读取哪些行。这些被称为access谓词。)如您所见,WHERE
子句应用于呈现给引擎的每一行。
另一方面,只有在读取所有行(验证所有谓词)后才进行聚合。
想一想:SUM()
仅适用于满足以下条件的行WHERE
状况。如果你把SUM()
in the WHERE
子句,您要求循环逻辑。新行是否通过WHERE
条款?我怎么会知道?如果它会通过,那么我必须将其包含在SUM
,但如果不是,则不应将其包含在SUM
。那么我该如何评估SUM
健康)状况?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)