美文网首页
WHERE和HAVING的区别

WHERE和HAVING的区别

作者: 钟离惜 | 来源:发表于2020-12-26 22:40 被阅读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后执行。

    相关文章

      网友评论

          本文标题:WHERE和HAVING的区别

          本文链接:https://www.haomeiwen.com/subject/clqnnktx.html