登录
首页 >  数据库 >  MySQL

SQL语句中,having子句是在select子句之前执行的吗?

时间:2024-12-15 21:31:03 431浏览 收藏

有志者,事竟成!如果你在学习数据库,那么本文《SQL语句中,having子句是在select子句之前执行的吗?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

SQL语句中,having子句是在select子句之前执行的吗?

sql语句中select和having子句的执行顺序

对于sql语句中select和having子句的执行顺序,说法不一。有观点认为先执行select,然后再执行having。然而,在本文中,我们将讨论另一种观点,即先执行having子句,再执行select。

举个例子,有一张表,包含以下数据:

idnum
120
230
340

如果我们执行以下sql语句:

SELECT sum(num) AS all_num
FROM table_name
GROUP BY id
HAVING all_num > 50

按照上述观点,执行顺序如下:

  1. 执行having子句:对分组求和后的结果进行过滤,过滤出总和小于50的行,舍弃这些行。
  2. 执行select子句:从剩余行中选择出求和后的总和。

因此,在上面的示例中,id为1和2的行将被舍弃,因为它们的总和分别为20和30,小于50。只有id为3的行保留,因为它的总和为40,大于50。最终,select子句返回的结果为[40]。

这个顺序可能看起来有些违反直觉,因为似乎select子句应该在having子句之前执行,以提供过滤所需的输入。然而,在sql中,having子句实际上是在select子句(如果存在)执行之前执行的。这种执行顺序对于确保having子句只作用于聚合结果(例如,sum(num))而不是原始数据非常重要。

今天关于《SQL语句中,having子句是在select子句之前执行的吗?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>