Oracle 中的 ROWID 和 ROWNUM
Oracle 中的 ROWID 和 ROWNUM
在 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相关信息见Oracle 专题页面 http://www.bkjia.com/topicnews.aspx?tid=12
评论暂时关闭