SQL:HAVING 和 WHERE

参考:SQL中where与having的区别  博主:永恒的留忆

一、where和having的区别

  • where:

    1. where 是一个约束声明使用 where 来约束来自数据库的数据
    2. where 是在结果返回之前起作用的;
    3. where 中不能使用聚合函数;
  • having:

    • having 是一个过滤声明
    • 在查询返回结果集以后,对查询结果进行的过滤操作;
    • 在 having 中可以使用聚合函数;

 

 

二、聚合函数和 group by

  • 聚合函数就是例如 SUM、COUNT、MAX、AVG 等对一组(多条)数据操作的函数,需要配合 group by 来使用;
    • 如:
    • SELECT SUM(population), region FROM T01_Beijing GROUP BY region; //计算北京每个分区的人数

 

 

三、where 和 having 的执行顺序

  • where 早于 group by 早于 having;
    • where 子句在聚合前先筛选记录,也就是说作用在 group by 子句和 having 子句前,而 having 子句在聚合后对组记录进行筛选

 

 

四、where 不能使用聚合函数、having 中可以使用聚合函数

  • 例 1:筛选出北京西城、东城、海淀及各区学校数量

    • SELECT region,count(school) 
      FROM T02_Bejing_school 
      WHERE region IN ('海淀' , '西城' , '东城') GROUP BY region;

 

  • 例 2:筛选出北京西城、东城、海淀三个区中学校数量超过10所的区及各区学校数量

    • SELECT region,count(school) 
      FROM T02_Bejing_school 
      WHERE region IN ('海淀' , '西城' , '东城') 
      GROUP BY region HAVING count(school) > 10;

       

  • 注:

    • 不能用 where 来筛选超过学校数量超过10 的区,因为表中不存在这样一条记录;而 HAVING 子句可以让我们筛选成组后的各组数据
上一篇:EFCore自己用的点东西


下一篇:索引实效的相关场景