您好,欢迎访问一九零五行业门户网

oracle分页查询原理是什么

oracle的分页查询原理:1、利用oracle的rownum字段的特性查询;2、查询指定数量n条数据;3、从指定数量n条查询结果中,取出m条数据;4、在web开发中将m、n作为参数进行传递,就可以得到分页的结果。
本教程操作环境:windows10系统、oracle 11g版、dell g3电脑。
oracle分页查询原理是什么分页的原理:
        1.借助oracle的rownum这个字段的特性查询。
2.  查询前n条数据
        3.从第2步的查询结果中取m到n条数据
       4.在web开发中将m,n作为参数进行传递,就可以得到分页的结果。
例子:  查询表中20~30条记录,sql语句如下。
select * from( select rownum as pageno, a.* from tablename a where rownum <= 30) b where b.pageno >=20;
示例:
--如何获取雇员表中薪水最高的前5人?
select * from(select * from emp order by sal desc)where rownum<6
--如何获取雇员表中薪水排名第5的雇员信息
select * from(select * from emp order by sal desc)where rownum=5
--结果查询不出内容
--同样rownum>=5查询5名之后的成绩也失败
--这里就涉及到rownum只能小于不能大于等于。所以--oracle数据库分页查询的一个重要障碍就是这个。
--至于原理因为rownum是一个每一次都要从1开始排列的伪列。于是rownum>=n。比如1大于任何n(第几条)都不成立。倒是可以rownum=1.可以查到。因为1>=1成立。n=2,1>=2就不成立了。所以大于等于只能查第一条。加上小于等于。只能查这些了。所以这个困难算是增加了分页查询的难度与障碍。
--方法一 最简单的查询
--第五条到第十条。
--只有一层嵌套,一个子查询,
select * from(select rownum rn ,e.* from emp e where rownum<=10)where rn>=5;
--这样其实就是下面的方法转化而来。
--也就是子查询得到的新表再次被查询。
--关键的一步就是rownum rn。
--而且不要忘了e.*,不然没有完整数据。
select * from (select rownum rn, e.* from emp e where rownum <= 10) table_1 where table_1.rn>= 5;
--上面的没有排序,下面进行排序
--因为要先排序,才能查询,所以表越大,效率越慢。
--方法二
select * from(select rownum rm ,e.* from emp e order by sal desc )where rm>=5 and rm<=10
--下面是用分析函数的方法;
--方法三
select * from (select emp.*, row_number () over (order by sal desc) rank from emp) where rank >=6 and rank<=10;
--可是我们实际查询看一下结果,发现完全不一样。
--人工查看了一下。分析函数的方法结果是正确的。不理解。
--有没有谁能解释一下。
--下面来一个没有意义的
select * from (select e.*, rownum as rn from ( select * from emp order by sal desc) e)ee where ee.rn>=5 and ee.rn<=10
--方法四(海量数据查询,如百度,天猫查询)
select * from(select e.* ,rownum rnfrom (select *from emporder by sal desc) ewhere rownum<=10)where rn>=6;
--分解步骤
--第一步:
select * from emp order by sal desc
--第二步:
select e .*,rownum rn from(select * from emp order by sal desc) e
--第三步:
select e .*,rownum rn from(select * from emp order by sal desc) ewhere rownum<=10
--第四步:
select * from(select e .*,rownum rn from(select * from emp order by sal desc) ewhere rownum<=10)where rn>=5
--猜测错误。
select e .*,rownum rn from(select * from emp order by sal desc) ewhere rn<=10
--起别名必须查询出数据表才行,
--而查询条件用还不存在的条件去判断,自然失败。
--方法五,闲的无聊的用法
with ee as ( select e.*, rownum rn from ( select * from emp order by sal desc )e ) select ee.* from ee where ee.rn>=5 and ee.rn<=10
推荐教程:《oracle视频教程》
以上就是oracle分页查询原理是什么的详细内容。
其它类似信息

推荐信息