php oracle分页,详解oracle分页查询的基础原理

这篇文章主要介绍了详解oracle分页查询的原理,从实例测试数据具体分析了实现方式,本文从数据查询原理,以及分页实现的方法详细分析了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;

bbf00f23667ca8640adb700e79035cd6.png

4 rowid一般用不到,Oracle内部用来存储行的物理位置,和分页相关的就是rownum,也就是行号

1 查询小于5的行,查询出四条结果

select rowid,rownum,id,name from test where rownum <5;

30629e0f0058767827ec320ef51e6148.png

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的条件,则第一行被去掉,之前的第二行变为新的第一行,如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。

030521c107f15446d3733bcabf791dbd.png

3 正确写法:因为>用不了,将行号用内层查询查询出来当做一个结果集,在外层用内层结果集进行比较即可

select rownum,id,name from

( select rownum rn, u.* from test u where rownum<5) un

where un.rn>2

14dfb9524ebd868f2019f26e51a332be.png

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

2b1a0f4a85c2ee06cefde7974fd8b2ed.png

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

select rownum,id,name from (

select rownum rn, n.* from

(

select * from test --最内层循环该怎么写怎么写

) n where rownum <=6 --小于限制写在第二层

)

where rn>=4

以上内容就是oracle分页查询的基础原理,希望能帮助到大家。

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值