oracle分页查询原理浅析
原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列
1 创建测试表
CREATE TABLE TEST(
ID NUMBER,
NAME VARCHAR2(20)
)
2 插入测试数据

INSERT INTO TEST VALUES (1,'张三');
INSERT INTO TEST VALUES (2,'李四');
INSERT INTO TEST VALUES (3,'王五');
INSERT INTO TEST VALUES (4,'赵六');
INSERT INTO TEST VALUES (5,'郑七');
INSERT INTO TEST VALUES (6,'胡八');
INSERT INTO TEST VALUES (7,'刘九');

3 查看表字段,证实自带的字段
select rowid,rownum,id,name from TEST;

4 rowid一般用不到,Oracle内部用来存储行的物理位置,和分页相关的就是rownum,也就是行号
二
1 查询小于5的行,查询出四条结果
select rowid,rownum,id,name from test where rownum <5;

2 查询大于2小于5的行
select rownum,id,name from test where rownum>2 and rownum <5;
发现什么也没查出来,什么原因呢?,
rownum有如下特点:
1 ROWNUM只适用于小于或小于等于,如果进行等于判断,那么只能等于1;
2 ROWNUM是oracle系统顺序分配的行的编号,返回的第一行分配的是1,第二行是2,依此类推;
3 ROWNUM总是从1开始
4 第一条数据行号为1,不符合>2的条件,则第一行被去掉,之前的第二行变为新的第一行,如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。

3 正确写法:因为>用不了,将行号用内层查询查询出来当做一个结果集,在外层用内层结果集进行比较即可
select rownum,id,name from
( select rownum rn, u.* from test u where rownum<5) un
where un.rn>2

4 如果进行分页的话,比如每页三行,要查询第二页,则相当于查4,5,6条,起始行4= (页码-1)*每页长度+1,结束行6=页码*每页长度
select rownum,id,name from (
select rownum rn , t.* from test t where rownum <=6) n
where n.rn>=4

5 同样的可以把4中查询改为最常见的三层结构

select rownum,id,name from (
select rownum rn, n.* from
(
select * from test --最内层循环该怎么写怎么写
) n where rownum <=6 --小于限制写在第二层
)
where rn>=4
oracle分页查询原理浅析的更多相关文章
- oracle分页查询及原理分析(总结)
oracle分页查询及原理分析(总结) oracle分页查询是开发总为常用的语句之一,一般情况下公司框架会提供只需套用,对于增删改查而言,查是其中最为关键也是最为难的一块,其中就有使用率最高的分页查询 ...
- Oracle中的SQL分页查询原理和方法详解
Oracle中的SQL分页查询原理和方法详解 分析得不错! http://blog.csdn.net/anxpp/article/details/51534006
- 【SQL】Oracle分页查询的三种方法
[SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...
- mysql和oracle 分页查询(转)
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... (一). mysql的分页查询 mysql的分页查询是最简单的,借 ...
- Oracle分页查询语句的写法(转)
Oracle分页查询语句的写法(转) 分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. Oracle分页查询语句使我们最常用的 ...
- oracle 分页查询数据重复问题
最近在做项目的时候发现一个问题,oracle 在查询分页数据的时候,有几条数据重复查询了,并且有几条数据在分页的时候消失了.百度了一下发现,ORACLE 在查询数据的时候返回的行不是固定的,他只是按照 ...
- mysql和oracle分页查询
MYSQL分页查询 方式1: select * from table order by id limit m, n; 该语句的意思为,查询m+n条记录,去掉前m条,返回后n条记录.无疑该查询能够实现分 ...
- 工作中遇到的oracle分页查询问题及多表查询相关
在工作中,有时,我们会用到oracle分页查询.这时,就需要先了解oracle的rownum.rowmun是oracle的伪列,只能用符号(<.<=.!=),而不能用这些符号(>,& ...
- Oracle分页查询语句的写法
分页查询是我们在使用数据库系统时经常要使用到的,下文对Oracle数据库系统中的分页查询语句作了详细的介绍,供您参考. AD:2013云计算架构师峰会精彩课程曝光 Oracle分页查询语句使我们最常用 ...
随机推荐
- 微信小程序 template添加点击事件
介绍template是微信小程序提供的模板,可以在模板中定义代码片段,然后在不同的地方调用. 简单使用定义template因为项目中可能会需要到不止一个template,所以最好新建一个文件夹来存放t ...
- svn提交遇到冲突解决方法
冲突:如果提交时候发现冲突了先不急着提交,否则会产生冲突文件. 解决步骤: 1.将本地文件先复制一份 2.svn revert(恢复到没修改前版本) -> svn update(更新当前最新版本 ...
- js两个日期相减
function dateHanle(d1,d2){ if(Date.parse(d1) - Date.parse(d2)==0) { console.log("d1等于d2"); ...
- mac 下搭建 php + apache + mysql 服务器(cool)
之前做.net 网站.后转ios .所有很少接触windows 啦.但有时候自己还真需要个测试的服务器环境.干脆把自己电脑搞成服务器得了 下面贴上链接: Apache+PHP+Mysql OS X 1 ...
- win764bit系统plsqldeveloper11连接oracle11g64bit配置方法
win764bit系统plsqldeveloper11连接oracle11g64bit配置方法: 原因:plsqldeveloper都是32位的没有64位的程序 准备工作: 1,先要下载instant ...
- js获取checkbox复选框获取选中的选项
js获取checkbox复选框获取选中的选项 分享下javascript获取checkbox 复选框获取选中的选项的方法. 有关javascript 获取checkbox复选框的实例数不胜数.js实现 ...
- FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节
注意部FPM时的环境一定要跟生产环境的系统版本最好是保持一至,我第一次测试没通过,(我在CENTOS7和部属FPM打好的包在Centos6.x和安装,结果失败) 1:安装 FPM打包工具的依赖包: [ ...
- layer-list:Android中layer-list使用详解
使用layer-list可以将多个drawable按照顺序层叠在一起显示,默认情况下,所有的item中的drawable都会自动根据它附上view的大小而进行缩放, layer-list中的item是 ...
- React 设计思想
https://github.com/react-guide/react-basic React 设计思想 译者序:本文是 React 核心开发者.有 React API 终结者之称的 Sebasti ...
- 此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库
警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared ...