【问题标题】:behavior of DBMS after executing where clause执行 where 子句后 DBMS 的行为
【发布时间】:2019-12-14 14:50:49
【问题描述】:

select查询中,当某些记录不满足where子句中的条件时,是否会忽略它们以执行后续子句?

例如,假设我们有一个group by 子句,然后,我们在max(someThing) 上的having 子句中有一个条件。 如果一条记录的属性为someThing的最大值,并且不满足where子句中的条件,它会在有与否中检查?

【问题讨论】:

  • 简答 No.

标签: mysql sql select where-clause having-clause


【解决方案1】:

在选择查询中,当某些记录不满足where子句中的条件时,是否会省略它们以执行后续子句?

是的,它们将被省略。子句是按顺序评估的,被子句删除的记录不会被后面的子句考虑。

如果一条记录 [...] 不满足 where 子句中的条件,它将在有与否中检查?

在 MySQL 中,SQL 语句中子句求值的典型顺序如下:FROMWHERESELECTGROUP BYHAVINGORDER BY

另外MySQL在SELECT子句的顺序上与其他RDBMS有点不同(在很多其他RDBMS中,它是在GROUP BYHAVING子句之后执行的),你可以看到WHERE子句执行得非常早(这对大多数 RDBMS 来说都是如此,如果不是全部的话)。因此,在评估 GROUP BYHAVING 子句之前,不满足它的记录将被删除。

您可以参考this SO post 了解有关该主题的更多详细信息。

【讨论】:

  • 在第一部分中,您的回答有一些冲突,首先您说“否”,然后继续说没有考虑到记录(= 表示该查询中的下一个子句省略)
  • 但我从你的解释中给出了答案
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多