「Oracle」Oracle高级查询介绍

本文详细介绍了Oracle数据库的高级查询技术,包括分组查询(如group by、having子句、分组函数的嵌套)、多表查询(等值连接、不等值连接、外连接、自连接)以及子查询的应用,同时探讨了子查询的执行顺序、空值问题等关键点。
摘要由CSDN通过智能技术生成

Oracle高级查询

高级查询在数据库的开发过程中应用广泛,从分组查询、多表查询和子查询三个方面介绍Oracle的高级查询。

分组查询

分组查询是按照一定的规则进行分组,分组以后数据会聚合,需要使用聚合函数,但是使用聚合函数不一定要分组,分组的关键字是group by。

常用的聚合函数有:最大值max(),最小值min(),平均值avg(),总和sum(),统计个数count()

count函数使用列名时会自动忽略空值

在这里插入图片描述

nvl函数可以防止count自动忽略空值,它的作用是当comm为空时返回0,因为0是非空,所以会进入统计总数。

在这里插入图片描述

group by子查询

在select 列表中所有未包含在聚合函数中的列都应该包含在group by子句中。

单列分组

求每个部门的平均工资,显示部门号,部门的平均工资。

select deptno,avg(sal) from emp group by deptno order by deptno

多列分组

按部门,不同职位,统计员工的工资总和

select detpno,job,sum(sal) from emp group by deptno,job order by deptno

过滤分组

having子句的使用

where与having的区别

  • where子句中不能使用聚合函数,先过滤后分组
  • having子句中可以使用聚合函数,先分组后过滤

注意:从SQL优化的角度上看,尽量使用where,因为where使得分组记录数大大降低,从而提高效率。

求平均工资大于2000的部门

select deptno,avg(sal) from emp where(avg(sal)) > 2000 group by deptno

在这里插入图片描述

where子句中不能使用聚合函数,所以报错,改成having xxx子句即可。

select deptno,avg(sal) from emp group by deptno having(avg(sal)) > 2000

在分组查询中使用order by

求每个部门的平均工资,显示部门号,部门的平均工资,按照工资升序排列。

select deptno,avg(sal) from emp group by deptno order by avg(sal)

也可以按列的别名排序

select deptno,avg(sal) avgsal from emp group by d
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值