oracle rownum Pseudocolumn

本文介绍了Oracle数据库中ROWNUM伪列的功能及使用方法,包括如何利用ROWNUM进行记录数限制、分页查询等,并提供了具体的SQL示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(今天仔细查看了下 oracle rownum 的文档,整理了一下,当做笔记;)


[b]ROWNUM Pseudocolumn[/b]

在查询结果中,ROWNUM 用于唯一标识查询结果记录,

------
[b]rownum 的赋值[/b]

rownum 的赋值时间点在 记录查处之后,且在排序之前,
查询结果中每条记录的 ROWNUM 是唯一的,在记录查出后,rownum值 第条记录是 1,第2条是 2,依次类推,
如果查询语句使用了 order by 语句,那么 rownum 在赋值后,记录再按照 order by 语句排序,则最后查出的结果的顺序 跟 rownum 的排序 可能是不一致的,

在带有 order by 语句的查询中,如果希望最后查出记录的顺序 和 rownum 一致,则需要先排序查询,再从查询结果进行查询,即多了一层查询;

------
[b]rownum 的使用[/b]

可以根据 rownum 限制查询记录数 或 分页,需要遵循 rownum 的规则,

rownum 的比较规则:
* <
小于比较,按大小比较,等同于小学算术比较;
* =
等于比较,只能和 1 进行等于比较,大于1的任何行都返回 false,
因此只能使用 rownum = 1,对于 rownum = 2 是不返回任何记录的;
* >
大于比较,只能大于 0 ,也就等同于没有限制,
当和大于0的值进行比较时,都返回 false,不会查处任何记录;

* <=
小于等于,相当于 < 和 = 的并集,等同于小学算术比较;
* >=
大于等于,相当于 > 和 = 的并集,只能和 0,1 比较,即 >=0 或 >=1,相当于没有限制,这个是没有意义的;


------
[b]> 和 = 比较操作:[/b]

如果希望像算数运算一样使用 > 和 = ,则需要先在查询中将 rownum 查出来,组成新的记录集,在新的记录集中存的 rownum 就变成了可以进行各种算数比较的数值,
再用1个外层查询从这个记录集中进行查询,这样外层查询就可以使用内层查出的 rownum 值进行各种比较了;

------
[b]分页[/b]

分页查询总需要对 rownum 进行 > 和 < 比较操作,但是 rownum 本身的 > 比较 不支持大于1的比较,
因此需要先将 rownum 查出来,然后再外层查询对已查出的 rownum 值进行各种算数比较;

------
[b]例子:[/b]
查询 abc 表的所有字段,每页10条,分别查: “不排序第1页”,“排序第1页”,“不排序第2页”,“排序第2页”


-- 不排序,前10条
select * from abc where rownum <=10;

-- 排序,前10条
select * from
(select * from abc order by id desc) abc_order
where rownum <=10;

-- 不排序,11 - 20 条
select * from
(select abc.*, rownum as row_num from abc where rownum <=20) abc_order
where row_num >= 11;

-- 排序,11 - 20 条
select * from
(
select abc_order.*, rownum as row_num
from
(select * from abc order by id desc) abc_order
where rownum <= 20
)
where row_num >=11;

------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值