执行 where 子句后 DBMS 的行为
behavior of DBMS after executing where clause
在select
查询中,当某些记录不满足where子句中的条件时,是否会被忽略以执行后续子句?
例如,假设我们有一个 group by
子句,在那之后,我们在 max(someThing)
的 having
子句中有一个条件。
如果一条记录的最大值为属性 someThing
,但不满足where
子句中的条件,则在having or not?
中进行检查
in a select query when some records doesn't satisfy the condition in where clause, they will be omitted for executing subsequent clauses or not?
是的,它们将被省略。条款按顺序评估,被条款删除的记录不会被后续条款考虑。
if a record [...] didn't satisfy the condition in the where clause, it will be examining in the having or not?
在MySQL中,SQL语句中子句的典型求值顺序如下:FROM
、WHERE
、SELECT
、GROUP BY
, HAVING
, ORDER BY
.
此外 MySQL 与其他 RDBMS 关于 SELECT
子句的顺序有点不同(在许多其他 RDBMS 中,它在 GROUP BY
和 [=14= 之后执行] 子句),您可以看到 WHERE
子句执行得非常早(对于大多数(如果不是全部)RDBMS 也是如此)。因此,不满足它的记录在评估 GROUP BY
和 HAVING
子句之前被清除。
您可以参考 this SO post 了解有关该主题的更多详细信息。
在select
查询中,当某些记录不满足where子句中的条件时,是否会被忽略以执行后续子句?
例如,假设我们有一个 group by
子句,在那之后,我们在 max(someThing)
的 having
子句中有一个条件。
如果一条记录的最大值为属性 someThing
,但不满足where
子句中的条件,则在having or not?
in a select query when some records doesn't satisfy the condition in where clause, they will be omitted for executing subsequent clauses or not?
是的,它们将被省略。条款按顺序评估,被条款删除的记录不会被后续条款考虑。
if a record [...] didn't satisfy the condition in the where clause, it will be examining in the having or not?
在MySQL中,SQL语句中子句的典型求值顺序如下:FROM
、WHERE
、SELECT
、GROUP BY
, HAVING
, ORDER BY
.
此外 MySQL 与其他 RDBMS 关于 SELECT
子句的顺序有点不同(在许多其他 RDBMS 中,它在 GROUP BY
和 [=14= 之后执行] 子句),您可以看到 WHERE
子句执行得非常早(对于大多数(如果不是全部)RDBMS 也是如此)。因此,不满足它的记录在评估 GROUP BY
和 HAVING
子句之前被清除。
您可以参考 this SO post 了解有关该主题的更多详细信息。