1. where与having的区别

WHEREHAVING 的根本区别在于: WHERE子句在 GROUP BY 分组与聚合函数之前对数据行进行过滤; HAVING 子句对 GROUP BY 分组和聚合函数之后的数据进行过滤。

  1. where

  2. having

    #例如:查找每个部门月薪
    #大于等于30000的员工人数
    select dept_id,count(*)
    from employee
    group by dept_id
    having salary >= 30000;
    

因为经过group by分组和聚合函数之后,不再存在salary字段,having 子句中只能使用分组字段或者聚合函数。

当然, WHEREhaving 可以组合在一起使用。例如:

select dept_id, count(*)
from employee
where salary > 10000
group by dept_id
having count(*) > 1;
/*
该语句返回了月薪大于10000的员工人数
大于1的部门;WHERE用于过滤月薪大于
10000的员工;HAVING用于过滤员工数量
大于1的部门。
*/
  1. WHERE与ON

当涉及多个表的关联时,我们那既可以使用 WHERE 子句也可以使用 ON 子句指定链接条件和过滤条件。这两者的主要区别在于:

2. 聚合函数和group by

聚合函数就是例如:

SUM、COUNT、MAX、AVG等

对一组(多条)数据操作的函数,需要配合group by来使用。

#如:
select SUM(popultion),region 
FROM T01_beijing 
GROUP BY region;//计算北京每个分区的人数

3. where和having的执行顺序