Oracle---排序、分组、表连接

本文详细介绍了Oracle数据库中的排序查询、分组查询和表连接操作,包括ORDER BY子句的ASC与DESC用法,GROUP BY与HAVING子句的组合应用,以及内连接、外连接(左连接、右连接、完全连接)和自然连接的概念及实例。通过这些内容,读者可以更好地理解和掌握Oracle中的数据查询技巧。
摘要由CSDN通过智能技术生成

一、排序查询

使用ORDER BY子句排序
ASC:升序(默认情况下)
DESC:降序
ORDER BY 子句在SELECT语句的结尾
例1:要求按照工资由低到高排序

select *
from emp
order by sal;

例2:检索emp表中所有的数据,并按照部门编号,员工编号来排序

select deptno,empno,ename
from emp
order by deptno,empno desc;
select *
from emp
order by deptno asc,empno desc;

二、分组查询

格式:

select 列名,聚合函数
from 表名
group by 列名;

注意:select后面可以写列名,但是写的这个列,必须是分组的列

例1:
在emp表中,通过分组的方式计算每个部门的平均工资

select deptno as 部门编号,avg(sal) as 平均工资
from emp
group by deptno;

例2:在emp表中,先通过分组的方式计算出每个部门的平均工资,然后通过having过滤掉平均工资大于2000的记录信息

select deptno as 部门编号,avg(sal) 平均工资
from emp
group by deptno 
having avg(sak)<=2000;

完整的查询结构

select 列名
from 表名
where 条件
group by 分组的列
having 分组的条件
order by 列名;

三、多表关联查询—表连接

1、内连接

和MySQL的写法要求是一模一样的。

在多表关联查询时,如果多个表之间存在同名的列,则必须使用表别名来限定列的引用
格式:

  • where
select 表名.列名
from 表名1,表名2,表名3...
where 表名1.=表名2.and 表名2.=表名3....
  • on
select 表名.列名
from 表名1 inner join 表名2
on 表名1.=表名2.inner join 表名3 on表名2.=表名3....

内连接的查询特征:只有两个表中的数据互相匹配到的情况下,才会有查询结果

例:在Scott模式下,通过deptno列来关联emp和dept表,并检索这两个表中相关字段的信息。

select e.empno as 员工编号,e.ename as 员工名称,d.dname as 部门
from emp e,dept d
where e.deptno=d.deptno;
select empno,ename,dname
from emp inner join dept
on emp.deptno=dept.deptno;

2、外连接

至少会返回一个表的所有行,outer可选可写

  • 左外连接left outer join
    返回的是左表的所有行
  • 右外连接right outer join
    返回的是左表的所有行
  • 完全链接full outer join
    返回的是两个表的所有行

例:实现emp和dept表的外部连接
左连接

select empno,ename,dname
from emp left outer join dept
on emp.deptno=dept.deptno;

右连接

select empno,ename,dname
from emp right outer join dept
on emp.deptno=dept.deptno;

完全链接

select empno,ename,dname
from emp full outer join dept
on emp.deptno=dept.deptno;

3、自然连接

自然连接是指在检索多个表的时候,Oracle会将第一个表中的列与第二个表中具有相同名称的列进行自动连接,在自然连接中,用户不需要明确指定进行连接的列,这个任务由Oracle系统自动完成,自然连接用“natural join”关键字

例:在emp表中检索工资大于2000的记录,并实现emp与dept的自然连接

select empno,ename,job,dname
from emp natural join dept
where sal>2000;

由于自然连接强制要求表之间具有相同的列名称,所以在设计表的时候会出现不可预知的错误,所以在实际中很少用到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值