在 Oracle 的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就像表中的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改查操作。oracle 中的 ROWID 和 ROWNUM 就是其中的伪列:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott
一、ROWID:表中没列数据的物理地址。通过 ROWID 查询表的效率是最高的。
SQL> select t.ename,rowid from emp t;
ENAME ROWID
---------- ------------------
SMITH AAAR3sAAEAAAACXAAA
ALLEN AAAR3sAAEAAAACXAAB
WARD AAAR3sAAEAAAACXAAC
JONES AAAR3sAAEAAAACXAAD
MARTIN AAAR3sAAEAAAACXAAE
BLAKE AAAR3sAAEAAAACXAAF
CLARK AAAR3sAAEAAAACXAAG
SCOTT AAAR3sAAEAAAACXAAH
KING AAAR3sAAEAAAACXAAI
TURNER AAAR3sAAEAAAACXAAJ
ADAMS AAAR3sAAEAAAACXAAK
JAMES AAAR3sAAEAAAACXAAL
FORD AAAR3sAAEAAAACXAAM
MILLER AAAR3sAAEAAAACXAAN
14 rows selected
SQL> select t.ename,rowid from emp t where t.rowid = 'AAAR3sAAEAAAACXAAA';
ENAME ROWID
---------- ------------------
SMITH AAAR3sAAEAAAACXAAA
oracle 中的各种索引则是通过不同的渠道获得 ROWID 从而达到高效率查询。
二、ROWNUM:表示结果集中每一行的行号,第一行为1,每行行号增加1,且 WHERE 条件中 ROWNUM 不能大于。
SQL> select ename,rownum from emp;
ENAME ROWNUM
---------- ----------
SMITH 1
ALLEN 2
WARD 3
JONES 4
MARTIN 5
BLAKE 6
CLARK 7
SCOTT 8
KING 9
TURNER 10
ADAMS 11
JAMES 12
FORD 13
MILLER 14
14 rows selected
--利用 ROWNUM 实现分页功能。(每页显示5条数据,显示第二页)
SQL> select * from (select * from (select ename,rownum r from emp) t where r <= (2*5)) t2 where r > ((2-1)*5);
ENAME R
---------- ----------
BLAKE 6
CLARK 7
SCOTT 8
KING 9
TURNER 10
本文介绍了Oracle数据库中的两个重要伪列ROWID和ROWNUM。ROWID用于标识表中每一行数据的物理地址,通过ROWID查询数据能获得最高效率;ROWNUM则为查询结果集中的行编号,可用于实现数据分页等功能。
3747

被折叠的 条评论
为什么被折叠?



