where、having和on的区别

时间:2021-09-16 21:35:30

where、having和on的区别

having 与where 子句类似,均用于设置限定条件,where子句的作用是在对查询结果前,将不符合where条件的行去掉,条件中不能包含聚合函数,使用where条件显示特定的行。

having子句作用是筛选满足条件的组,限制返回的结果集,即在分组之后过滤数据,条件中经常包含聚合函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
例如:

select deptno,sum(sal) from emp 
where sal>1200
group by deptno
having sum(sal)>8500
order by deptno

在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

参考资料1:Oracle中group by用法
参考资料2:left join on 和where条件的放置