sql-WHERE和HAVING之间在语义上有什么区别?

让我们暂时搁置GROUP BY.在普通查询中(没有GROUP BY),语义上有什么区别? this answer为什么起作用? (将别名放在HAVING子句中,而不是WHERE中)

解决方法:

HAVING在汇总行上进行操作-在应用GROUP BY之前,WHERE在整个表上进行操作. (您不能将GROUP BY放在一边,HAVING是保留供GROUP BY使用的子句-省略GROUP BY不会更改幕后发生的隐式操作).

还需要注意的是,因此,WHERE可以使用索引而HAVING不能使用索引. (在超级琐碎的未分组结果集中,理论上可以使用索引进行HAVING,但我从未见过以这种方式实际实现查询优化器).

上一篇:八、分组查询详解(group by & having)


下一篇:mysql--查找重复的电子邮件