WHERE和HAVING的区别

2020-12-26  本文已影响0人  钟离惜

1、处于的语句不一样

WHERE可以用于增删改查,但是HAVING只能用于SELECT。

2、HAVING只能用于SELECT的字段或SELECT AS的临时字段

SELECT DISTINCT(color) FROM xg_base_itemtype HAVING price>=2;

报错:Unknown column 'price' in 'having clause'。

3、误区:HAVING只能与GROUP BY一起使用

这个说法是错误的,比如下面这种情况,在筛选SELECT出来的字段时,其实HAVING和WHERE 的效果是一样的。

SELECT DISTINCT(color) FROM xg_base_itemtype HAVING color>=2;

4、WHERE不可以使用聚合函数、HAVING可以使用聚合函数

聚合函数就是例如SUM, COUNT, MAX, AVG等对一组(多条)数据操作的函数,可能需要配合group by 来使用。
WHERE的条件只能来自表中已有的字段。

SELECT COUNT(*) AS total_num FROM xg_base_itemtype WHERE total_num >10 GROUP BY color;
报错:Unknown column 'total_num' in 'where clause'。
SELECT COUNT(*) AS total_num FROM xg_base_itemtype GROUP BY color HAVING total_num >10;

而HAVING可以直接筛选聚合函数的结果。

5、运行顺序不一样

WHERE的过滤在执行语句进行分组之前应用的。
HAVING的过滤是在分组条件后执行的。
即如果WHERE和HAVING一起用时,WHERE会先执行,HAVING后执行。

上一篇 下一篇

猜你喜欢

热点阅读