Oracle where和having的区别
总结: 1. where不能放在group by后面; 2. having是跟group by连在一起用的,放在group by后面,此时的作用相当于where; 3. where后面的条件中不能有聚集函数,比如sum(),avg()等,但是having可以; 4. where和having都是对查询结果的一种筛选,下面分别说明其用法和异同点。注:本文使用字段为oracle数据库中默认用户scott下面的emp表,sal代表员工工资,deptno代表部门编号。 where子句 where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选。where子句中允许使用比较运算符(>,<,>=,<=,<>,!=|等)和逻辑运算符(and,or,not)。由于大家对where子句都比较熟悉,在此不在赘述。 having子句 having子句通常跟group by子句一起使用的。因为having的作用是对使用group by进行分组统计后的结果进行进一步的筛选。举个例子:现在需要找到部门工资总和大于10000的部门编号: 第一步: select deptno,sum(sal) from emp group by deptno;
select deptno,sum(sal) from emp group by deptno having sum(sal)>10000;
select deptno,sum(sal) from emp where deptno!=‘10‘ group by deptno having sum(sal)>8000;
筛选结果如下: DEPTNO?? SUM(SAL) ------ ---------- ??? 30?????? 9400 ??? 20????? 10875 不做太多解释了,这个简单的小例子能够很好的说明where和having的作用。 五、异同点 ???? 它们的相似之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句与组有关,而不是与单个的行有关。 ???? 最后:理解having子句和where子句最好的方法就是基础select语句中的那些句子的处理次序:where子句只能接收from子句输出的数据,而having子句则可以接受来自group by,where或者from子句的输入。 转载自:https://www.cnblogs.com/jameshappy/archive/2012/05/23/2515034.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |