关于适用where子句和having子句判断条件一样结果却不一样的问题

来源:3-4 数据操作语言:Having子句

应该怎么爱

2021-09-26 11:07:41

使用where子句:

select deptno ,count(*) from t_emp where sal >2000 GROUP BY 1:

相关截图:

https://img.mukewang.com/climg/614fe3640990700f02680136.jpg正常显示


使用having子句:

select deptno ,count(*) from t_emp GROUP BY 1 having sal >2000 ;

相关截图:

https://img.mukewang.com/climg/614fe37d09e6921906070114.jpg

报错



请问为什么会这样呢

写回答

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

0 学习 · 9886 问题

查看课程