在oracle中where 子句和having子句中的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在oracle中where 子句和having子句中的区别相关的知识,希望对你有一定的参考价值。

一个是分组前条件,一个是分组后判断。
比如select id,max(a) b from table where id>10 group by id having b>100;
这个语句说的就是先挑出id大于10的,然后按照id进行分组,求出max的值,最后在判断max的值是不是大于100;
最后的结果就是id大于10,并且max的值大于100;
如果是elect id,max(a) b from table group by id having id>10 and b>100;
那么就是先分组,不管id是不是大于10,都分组。分组计算完成之后再判断id>10 and b>100的两个条件。
从我这个题目来看二者没有区别,不过在执行的时候时候计算量区别的,数据量越大,计算量越大越明显,因为后者会出现越来越多的不必要运算占用资源。
参考技术A where子句:仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选。where子句中允许使用比较运算符(>,<,>=,<=,<>,!=|等)和逻辑运算符(and,or,not)。
having的作用是对使用group by进行分组统计后的结果进行进一步的筛选。现在需要找到部门工资总和大于10000的部门编号
第一步:select deptno,sum(col1) from table1 group by deptno;
第二步:select deptno,sum(col1) from table1 group by deptno having sum(col1)>10000;

以上是关于在oracle中where 子句和having子句中的区别的主要内容,如果未能解决你的问题,请参考以下文章

oracle中where子句和having子句中的区别

oracle中where 子句和having子句中的区别

HAVING 子句如何真正起作用?

使用Having子句

SQL中WHERE 和HAVING的区别

GROUP BY,WHERE,HAVING之间的区别和用法