您现在的位置是:群英 > 数据库 > 关系型数据库
oracle分页查询原理怎么理解,步骤是什么
Admin发表于 2022-05-14 10:46:03903 次浏览
相信很多人对“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 rn
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
) e
WHERE  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) e
WHERE ROWNUM<=10

--第四步:

SELECT * FROM(
SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e
WHERE ROWNUM<=10)
WHERE rn>=5

--猜测错误。

SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e
WHERE 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分页查询原理怎么理解,步骤是什么”已经有了进一步的了解,更多相关的问题,欢迎关注群英网络或到群英官网咨询客服。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: oracle分页查询
相关信息推荐
2022-06-13 17:06:27 
摘要:sql出现无效的列索引原因:1、占位符与参数数量不一致;2、sql拼接错误,注意每个【%】都要用 【''】 包括起来 ,与参数用【||】拼接;3、错误的注释。
2022-08-13 17:51:49 
摘要:查询语句:1、“select * from 表名;”,可查询表中全部数据;2、“select 字段名 from 表名;”,可查询表中指定字段的数据;3、“select distinct 字段名 from 表名”,可对表中数据进行去重查询。
2022-08-08 17:34:42 
摘要:在oracle中,分区表是将大表分解为多个小的、可管理的分区表,每个分区表之间相互独立,共同构成了完整的表,逻辑上讲只有一个表或一个索引,但在物理上这个表或索引可能由数个物理分区组成;分区表可以分为范围分区、列表分区、哈希分区和组合分区。
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部