Oracle 学习笔记(八)子查询、分页查询

子查询

多列子查询

上篇笔记讲的单行子查询是指子查询只返回单列、单行数据;多行子查询是指返回单列多行数据,都是针对单列而言。而多列子查询是指查询返回多个列数据的子查询。 

查询与 SMITH 的部门和岗位完全相同的所有雇员

1、查询 SMITH 的部门和岗位

SELECT deptno, job FROM emp WHERE ename = 'SMITH'; 

2、查询与 SMITH 的部门和岗位完全相同的所有雇员

SELECT * FROM emp WHERE (deptno, job) = (SELECT deptno, job FROM emp WHERE ename = 'SMITH'); 

 

在 from 子句中使用子查询

查询高于自己部门平均工资的员工的信息 

1. 查出各个部门的平均工资和部门号 

SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno; 

2. 把上面查询的结果看做是一张子表 

SELECT e.ename, e.deptno, e.sal, ds.mysal FROM emp e, (SELECT deptno, AVG(sal) mysal FROM emp GROUP by deptno) ds WHERE e.deptno = ds.deptno AND e.sal > ds.mysal; 

当在 from 子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。(给表取别名的时候不能加 as,给列取别名可以加 as)  

 

分页查询

按雇员的 id 号升序分页 

Oracle分页一共有三种方式 :

1.根据 rowid 来分页

select * from t_test where rowid in (select rid from (select rownum rn, rid from(select rowid rid, cid from t_test order by cid desc) where rownum<1000) where rn>998) order by cid desc; 

 

2.按分析函数来分页

select * from (select t.*, row_number() over(order by cid desc) rk from t_test t) where rk<1000 and rk>998; 

 

3.按 rownum 来分页

select * from (select t.*,rownum rn from(select * from t_test order by cid desc)t where rownum<1000) where rn>998; 

 

感觉第 1 种效率最好,第 3 种次之,第 2 种最差。 

 

今天笔记做到这,后续有空继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值