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条件的放置