您的位置:首页 > 数据库 > Oracle

Oracle 的ROWID 和 ROWNUM

2014-09-19 21:23 309 查看
/article/1444743.html



1、ROWID

ROWID 用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。而对于聚簇表,由于聚簇特性,不同表上的记录由于存储在相同的簇上,因此会拥有相同的ROWID。数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。

SQL> select rowid,dept.* from dept ; -->查看表dept中所有记录的rowid

ROWID DEPTNO DNAME LOC

------------------ ---------- -------------- -------------

AAAO0fAAFAAAAlmAAA 10 ACCOUNTING NEW YORK

AAAO0fAAFAAAAlmAAB 20 RESEARCH DALLAS

AAAO0fAAFAAAAlmAAC 30 SALES CHICAGO

AAAO0fAAFAAAAlmAAD 40 OPERATIONS BOSTON

SQL> set autotrace on;

SQL> select * from dept where rowid='AAAO0fAAFAAAAlmAAC'; -->使用rowid访问数据

DEPTNO DNAME LOC

---------- -------------- -------------

30 SALES CHICAGO

Execution Plan

--------------------------------------------
-->执行计划中为TABLE ACCESS BY USER ROWID访问方式

Plan hash value: 3453257278

--------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

---------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 1 | 20 | 1 (0)| 00:00:01 |

| 1 | TABLE ACCESS BY USER ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 |

2、ROWNUM

select
rownum, name from student where rownum=1; 获得第1条记录

select
rownum, name from student where rownum =2; 结果永远为空

select
rownum, name from student where rownum <=10; 取得前10条记录

select
rownum, name from student where rownum >10; 结果永远为空

select
* from(select rownum no, name from student) where no>10;
取得第10条以后的记录

select
* from (select rownum no,
name from student where rownum<=20 ) where no >=10; 取得第10到20条记录

ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值。所以您没办法期望得到下面的结果集:

11 aaaaaaaa

12 bbbbbbb

13 ccccccc

.................

rownum >10 没有记录,因为第一条不满足去掉的话,第二条的ROWNUM又成了1,所以永远没有满足条件的记录。或者可以这样理解:

ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下条,可是它的rownum还是1,又被删除,依次类推,便没有了数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: