七、Oracle数据库之学习笔记---Oracle的表的基本查询(4)

时间:2022-09-14 08:40:13

一、多表查询

查询条件:

查询薪水高于自己部门的平均薪水的员工姓名,部门编号及薪水

查询语句:

1.先查询各个部门号及其部门平均工资

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

2.将1的语句当作查询的子表,进行链表查询

select ename ,emp.deptno,sal from emp emp  ,(select  deptno ,avg(sal) avgS from emp group by deptno)  avgSal where emp.deptno=avgSal.deptno and sal >avgSal.avgS;

在from 字句中使用子查询时,该子查询会当作一个视图来对待,因此称作内嵌视图,当在from 字句中使用子查询时,必须给予指定别名(不能用as命名别名)


二、分页查询(rownum)

查询条件:

查询6-10条根据薪水排序的员工信息

查询语句

select * from ( select emp.* ,rownum rn from (select  * from emp order by sal desc) empwhere rownum<11) where rn>5;

 1.查询满足条件的所有记录:现根据各种查询条件查询出所有满足条件的员工信息: (select  * from emp order by sal desc) emp

 2.对查询的所有结果进行第一次筛选:然后对嵌套视图emp筛选前10条记录,wornum在第二层嵌套中只能引用一次,且不能使用其别名rn

 3.对第二步的结果进行最后一次筛选

思考:以下语句查询结果也同上述分页查询结果,但为什么不能这没用呢?提示(查询的执行顺序)

select * from (select emp.* ,rownum nu from emp where rownum<11 order by sal desc) where nu>5;


三、分页查询(rowid)

查询条件:

查询9980-10000行记录

查询语句:

select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from

t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;

 
1.将表按cid降序排列
2.检索出前10000条
3.检索出9980到10000这几条的rowid
4.检索出rowid在上一步的结果中的数据并且按照cid降序排列

通过rowid查询分页引用 http://www.cnblogs.com/hxw/archive/2005/09/11/234619.html文章