面试官:说说WHERE,HAVING和ON的区别?
近有小伙伴私信我:今天面试有道题把我一下子问懵了,让我说出WHERE,HAVING和ON的区别。
觉得这个问题很有价值给小伙伴们分享一下。
注:以下测试和结论基于SQL Server数据库。
这三个关键字我们平时经常使用,他们一个共同点是:都可以用来过滤数据。
那不同点是什么呢?我们先来看看WHERE和HAVING的区别
WHERE和HAVING
在搞清楚WHERE和HAVING的区别之前,我们需要知道老生常谈的SQL执行顺序:
(8)SELECT (9)DISTINCT (11)
上面的序号代表SQL在运行时,数据库底层的先后顺序,我们可以看到:
WHERE是在GROUP BY之前执行的,所以WHERE的后面是不能使用聚合函数来进行数据过滤的,只能使用FROM表里的字段来进行数据过滤;
HAVING是在GROUP BY之后执行的,那么这些数据就都已经分过组了的,可以使用聚合函数来进行数据的分组过滤。
我们举例说明一下有如下一张示例表Customers:
查询人数不小于2的省份和人数我们先用WHERE来试验
SELECT 省份,COUNT(*) 人数
FROM Customers
WHERE COUNT(*)>1
GROUP BY 省份
相关文章