一、多表查询
查询条件:
查询薪水高于自己部门的平均薪水的员工姓名,部门编号及薪水
查询语句:
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文章