Oracle数据库隐藏列 rownum 和 rowid 的使用

2025-10-22 16:27:11

1、rowid 隐藏列的介绍

rowid 列是 Oracle 为我们的数据表的每行数据提供的一个唯一的相对地址列,这一列是实实在在存在于数据表中的通过这列数值获取行数据是最快的!我们可以通过 select 获取这个隐藏列的数据:

select rowid, t.* from t

Oracle数据库隐藏列 rownum 和 rowid 的使用

2、rowid 隐藏列的作用

这是一列唯一值(需区分大小写),有时如果某个表没有设置主键,或者组合主键包含的列比较多不方便使用,可以使用这个 rowid 隐藏列作为主键列。

3、rownum 隐藏列的介绍

我们通过 select 语句获取的结果集中都会包含这个隐藏列,该列本质上是不存在于表中的,只是在获取到结果集后,Oracle为结果集附加的一列,该列数值从 1 开始递增,可以在执行select查询时,主动显示这列的值:

select rownum, t.* from t

Oracle数据库隐藏列 rownum 和 rowid 的使用

4、rownum 隐藏列使用的注意事项

注意,在执行 select 查询的 where 条件过滤时,数据表的行数据的 rownum 列会被赋予初始值 1,当其通过了 where 条件过滤进入结果集后,下一行数据的 rownum 会被赋予值 2 ,但如果其没有进入结果集中,则下一行数据的 rownum 继续为 1 ,以此类推!基于此,我们会得到如下结论:

1. select * from t where rownum = 1 ; // 可以获取一条数据 (演示和原因参考图1)

2. select * from t where rownum = 2;  // 无法获取到数据(演示和原因参考图2)

3. select * from t where rownum <= 5; // 可以获取到 5 条数据(演示和原因参考图3)

4. select * from t where rownum > 5; // 无法获取到任何数据(演示和原因参考图4)

Oracle数据库隐藏列 rownum 和 rowid 的使用

Oracle数据库隐藏列 rownum 和 rowid 的使用

Oracle数据库隐藏列 rownum 和 rowid 的使用

Oracle数据库隐藏列 rownum 和 rowid 的使用

5、rownum 获取 >num  的行数据

通过子查询固化 rownum 值来实现这种需求

select * from (select rownum rn, t.* from t ) where rn > 5 (图示)

Oracle数据库隐藏列 rownum 和 rowid 的使用

6、rownum 列的应用场景

Oracle数据库查询的分页就是通过 rownum 进行的,通常语句为:

select * from (select rownum rn, t.* from t ) where rn >= startIndex and rn <= endIndex


声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢