Oracle中的伪列 rowid,rownum及分页 详解
在Oracle数据库中,ROWID
是一个伪列,它可以唯一地标识表中的每一行。ROWID
通常是一个指向数据块地址的指针,可以快速地定位到数据行的物理位置。
ROWID
的值在行插入到表中时生成,一般不会改变,除非行被删除或移动。因此,可以使用ROWID
来快速确定表中行的位置。
使用ROWID
的例子:
SELECT ROWID, t.*
FROM your_table t
WHERE ROWID = 'AAAMN+AnAAAABuunAAA';
ROWNUM
是一个伪列,它返回结果集中行的序号。需要注意的是,ROWNUM
是在结果集形成之后才赋值的,所以不能在WHERE
子句中使用ROWNUM
来过滤大于1的行号。
使用ROWNUM
的例子:
SELECT ROWNUM, t.*
FROM your_table t
WHERE ROWNUM = 1;
Oracle数据库中没有直接支持LIMIT语句进行分页,但是可以使用ROWNUM
来实现类似的功能。
分页的例子:
SELECT *
FROM (
SELECT t.*, ROWNUM rnum
FROM your_table t
WHERE ROWNUM <= 20
)
WHERE rnum > 10;
上述SQL语句中,内部查询首先获取前20行,然后外层查询获取第11行到第20行。这样就实现了分页功能。
评论已关闭