关于适用where子句和having子句判断条件一样结果却不一样的问题
来源:3-4 数据操作语言:Having子句
应该怎么爱
2021-09-26 11:07:41
使用where子句:
select deptno ,count(*) from t_emp where sal >2000 GROUP BY 1:
相关截图:
正常显示
使用having子句:
select deptno ,count(*) from t_emp GROUP BY 1 having sal >2000 ;
相关截图:
报错
请问为什么会这样呢
1回答
好帮手慕小小
2021-09-26
同学你好,where子句与having子句的执行顺序是不一致的。执行顺序为:where-->group by-->having
而“select deptno ,count(*) from t_emp GROUP BY 1 having sal >2000 ;”执行“select deptno ,count(*) from t_emp GROUP BY 1 ;”后是没有sal字段的,所以在执行时会出现错误提示。
where子句与having子句虽然都是进行数据的筛选,但是并不等同,where是先进行筛选,符合条件的数据再进行分组、聚合统计算等操作,而having是先进行分组再进行数据筛选。where子句是不能被having子句完全替代的。
祝学习愉快~
相似问题
回答 1