Oracle中的分页查询~~~ROWNUM(行号)

您所在的位置:网站首页 oracle行号字段 Oracle中的分页查询~~~ROWNUM(行号)

Oracle中的分页查询~~~ROWNUM(行号)

2024-07-15 18:05| 来源: 网络整理| 查看: 265

Oracle中的表,除了我们建表时设计的各个字段,其实还有两个字段(此处只介绍2个),分别是ROWID(行标示符)和ROWNUM(行号)。即使我们使用DESCRIBE命令查看表的结构,也无法看到这两个列的描述,因为它们其实是只在数据库内部使用的,所以也通常称它们为伪列(pseudo column)。 建一个只有两个字段(id,col)的表。使用describe命令查看表结构,可以看到确实只有建表时的两个字段。但我们可以查询的时候,可以查找到伪列的值。

select rowid,rownum,id,col from table;

这个rowid我们一般用不到,Oracle数据库内部使用它来存储行的物理位置,是一个18位的数字,采用base-64编码。而这个rownum,我们正是用它来进行分页查询的,它的值,就是表示的该行的行号。 对于分页查询,我们只要想办法可以查询到从某一起始行到终止行就可以的,分页的逻辑可以放到程序里面。于是,我们理所当然会想到如下语句查询第2页的数据(每页2条数据,页码从1开始,所以起始行的行号为 (页码-1)*每页长度+1=3,终止行的行号为 页码*每页长度=4):

select * from table where rownum>=3 rownum =3的条件,所以第一行被去掉,之前的第二行变为新的第一行(即这个行号不是写死的,可以理解为是动态的),如此下去,一直到最后一行,条件始终没法满足,所以就一条数据也查不出来。 对症下药,要想解决这个问题,我们只要将行号查询出来生成一个结果集,然后再从这个结果集中,选择行号大于我们设定的那个值就可以了,上面的分页查找正确的写法应该是这样:

select id,col from( select rownum rn,u.* from table u) ua where ua.rn between 3 and 4;

上面的语句还可以优化:虽然不能用">=",但"



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3