SQL rowid 和 rownum

本文详细解释了Oracle数据库中的rowid和rownum概念。rowid作为物理地址用于定位数据的具体存储位置,而rownum则表示SQL查询结果的排序编号。通过实际例子展示了两者之间的区别及其使用场景。

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

rowid和rownum都是虚列,但含义完全不同。rowid是物理地址,用于定位oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序,从下面的例子可以看出其中的区别。



SQL> select rowid,deptno from dept order by deptno;

ROWID DEPTNO
------------------ ----------
AAABe/AAFAAABLqAAA 10
AAABe/AAFAAABLqAAB 20
AAABe/AAFAAABLqAAC 30
AAABe/AAFAAABLqAAD 40

SQL> edit
Wrote file afiedt.buf

1* select rowid,deptno from dept order by deptno desc
SQL> /

ROWID DEPTNO
------------------ ----------
AAABe/AAFAAABLqAAD 40
AAABe/AAFAAABLqAAC 30
AAABe/AAFAAABLqAAB 20
AAABe/AAFAAABLqAAA 10

SQL> edit
Wrote file afiedt.buf

1* select rownum,deptno from dept order by deptno
SQL> /

ROWNUM DEPTNO
---------- ----------
1 10
2 20
3 30
4 40

SQL> edit
Wrote file afiedt.buf

1* select rownum,deptno from dept order by deptno desc
SQL> /

ROWNUM DEPTNO
---------- ----------
1 40
2 30
3 20
4 10

 

just think about ROWNUM pseudo column as a 'magic'. You can do

where rownum < n

or

where rownum = 1

but NOT

where rownum > n

or

where rownum = some number > 1

If you have to you can do something like:

select * from(
select t.*,rownum rn from t
)
where rn = 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值