MySQL中where和having的区别
Where 是⼀个约束声明,使⽤Where来约束来之数据库的数据,Where是在结果返回之前起作⽤的。
Having是⼀个过滤声明,是在查询返回结果集以后对查询结果进⾏的过滤操作。
区别
- 在sql语句中执行的顺序不同,同时使用时where优先于having;
- 用法不同,where是用于分组(group by)前进行条件过滤,而having是用于分组(group by)后进行条件过滤;
- 对聚合函数的使用条件不同,where不能使用聚合函数,而having可以使用聚合函数;在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行.而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count)。
代码展示
首先建两个表,部门表和员工表:
-- 部门表
create table dept(
deptno int primary key auto_increment, -- 部门编号
dname varchar(14) , -- 部门名字
loc varchar(13) -- 地址
) ;
-- 员工表
create table emp(
empno int primary key auto_increment,-- 员工编号
ename varchar(10), -- 员工姓名 -
job varchar(9), -- 岗位
mgr int, -- 直接领导编号
hiredate date, -- 雇佣日期,入职日期
sal int, -- 薪水
comm int, -- 提成
deptno int not null, -- 部门编号
foreign key (deptno) references dept(deptno)
);
insert into dept values(10,'财务部','北京');
insert into dept values(20