oracle数据库分页查询原理与事例实现(五六种方法)
来源:互联网 发布:新疆商务厅 数据分析 编辑:程序博客网 时间:2024/06/07 02:45
–如何获取雇员表中薪水最高的前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数据库分页查询原理与事例实现(五六种方法)
- oracle数据库实现分页查询
- oracle rownum 原理及分页查询实现
- oracle分页查询sql原理与语句
- Oracle 数据库分页查询两种方法
- oracle与mysql 数据库sql 分页查询
- Oracle数据库分页查询语句与优化
- oracle分页查询原理
- 有关oracle实现分页查询的方法
- Oracle数据库分页查询
- oracle数据库分页查询
- oracle数据库分页查询
- oracle分页数据库查询
- oracle数据库分页原理
- MySQL、SqlServer、Oracle三大主流数据库实现分页查询的方法
- 数据库分页查询方法
- 数据库分页查询方法
- 数据库分页查询方法
- 函数参数传递时的“副本”
- ARM架构解析
- Qt 之 简单截图功能(二)实现可移动选中区域
- PPT扩展展示时,PPT展示界面背景色有时候突然变成黑底?如何解决?
- Git基本用法
- oracle数据库分页查询原理与事例实现(五六种方法)
- spring mvc 中对静态资源的访问配置
- 读书的意义所在。
- AngularJS简单入门案例
- Qt4 Phonon多媒体框架详解及简单实例
- 文章标题 HDU 2553 : N皇后问题 (DFS)
- 5.Ext JS actioncolumn动态加载图标/提示
- ARM架构图
- python string