承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601

SQL开发知识:oracle中where 子句和having子句中的区分介绍

管理员 2023-09-06 08:03:56 互联网圈 0 ℃ 0 评论 4952字 收藏

SQL开发知识:oracle中where 子句和having子句中的区分介绍

1.where 不能放在GROUP BY 后面

2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE

3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以

 Where和Having都是对查询结果的一种挑选,说的书面点就是设定条件的语句。下面分别说明其用法和异同点。

注:本文使用字段为oracle数据库中默许用户scott下面的emp表,sal代表员工工资,deptno代表部门编号。

一、聚合函数

    说明前我们先了解下聚合函数:聚合函数有时候也叫统计函数,它们的作用通常是对一组数据的统计,比如说求最大值,最小值,总数,平均值(
MAX,MIN,COUNT, AVG)等。这些函数和其它函数的根本区分就是它们一般作用在多条记录上。简单举个例子:SELECT SUM(sal) FROM emp,这里的SUM作用是统计emp表中sal(工资)字段的总和,结果就是该查询只返回一个结果,即工资总和。通过使用GROUP BY 子句,可让SUM 和 COUNT 这些函数对属于一组的数据起作用。

二、where子句

    where自居仅仅用于从from子句中返回的值,from子句返回的每行数据都会用where子句中的条件进行判断挑选。where子句中允许使用比较运算符(>,<,>=,<=,<>,!=|等)和逻辑运算符(and,or,not)。由于大家对where子句都比较熟习,在此不在赘述。

三、having子句

    having子句通常是与order by 子句一起使用的。由于having的作用是对使用group by进行分组统计后的结果进行进一步的挑选。举个例子:现在需要找到部门工资总和大于10000的部门编号?

第一步:

select deptno,sum(sal) from emp group by deptno;

挑选结果以下:

DEPTNO   SUM(SAL)
—— ———-
    30       9400
    20      10875
    10       8750

可以看出我们想要的结果了。不过现在我们如果想要部门工资总和大于10000的呢?那末想到了对分组统计结果进行挑选的having来帮我们完成。

第二步:

select deptno,sum(sal) from emp group by deptno having sum(sal)>10000;

挑选结果以下:

DEPTNO   SUM(SAL)
—— ———-
    20      10875

固然这个结果正是我们想要的。

四、下面我们通过where子句和having子句的对照,更进一步的理解它们。

    在查询进程中聚合语句(sum,min,max,avg,count)要比having子句优先履行,简单的理解为只有有了统计结果后我才能履行挑选啊。where子句在查询进程中履行优先级别优先于聚合语句(sum,min,max,avg,count),由于它是一句一句挑选的。HAVING子句可让我们挑选成组后的对各组数据挑选。,而WHERE子句在聚合前先挑选记录。如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号?

我们这样分析:通过where子句挑选出部门编号不为10的部门,然后在对部门工资进行统计,然后再使用having子句对统计结果进行挑选。

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子句的输入。

总结

以上所述是小编给大家介绍的SQL开发知识:oracle中where 子句和having子句中的区分介绍,大家如有疑问可以留言,或联系站长。感谢亲们支持!!!

文章来源:丸子建站

文章标题:SQL开发知识:oracle中where 子句和having子句中的区分介绍

https://www.wanzijz.com/view/77042.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信