Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1022438
  • 博文数量: 584
  • 博客积分: 2293
  • 博客等级: 大尉
  • 技术积分: 3045
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-28 11:15
文章分类

全部博文(584)

文章存档

2012年(532)

2011年(47)

2009年(5)

我的朋友

分类:

2012-05-17 23:38:56

原文地址:Oracle中的rowid和rownum 作者:icybay

rowid和rownum都是Oracle提供的伪数列, 但用途不同.

一般说来每一行数据对应的rowid是固定而且唯一的,在这一行数据存入数据库的时候就确定了。可以利用rowid来查询记录,而且通过rowid查询记录是查询速度最快的查询方法。rowid只有在表发生移动(比如表空间变化,数据导入/导出以后),才会发生变化。

rowid的用途
很快的方式访问表中的一行, 并且是表中唯一标识。

rowid的组成
rowid确定了每条记录是在Oracle中的哪一个数据对象,数据文件、块、行上。
rowid 的格式如下:
   数据对象编号        文件编号        块编号            行编号
   OOOOOO                FFF           BBBBBB             RRR

rownum表明了查询记录的顺序,返回的第一条row的序号为1,第二条row的序号为2,以此类推。
当查询语句中包含order by时, 会先执行rownum再按order by排序, 通常这不是我们想要的. 可以引入子查询来实现我们想要的结果.
SQL> SELECT ROWNUM,t.tid FROM (SELECT tid FROM test ORDER BY col) t;

对rownum应用>,>=,=,between...and条件,返回结果都为空:
因为当返回第一条记录,作为结果的第1条,分配rownum=1,
应用>,>=,=,between...and条件判断时,不满足条件,记录删除;
返回下一条记录时,仍作为结果的第1条,分配rownum=1,仍不满足条件,依次类推,结果为空。
select rownum from test where rownum=1;//返回1条记录(结果集中的第一条)
select rownum from test where rownum=2;
select rownum from test where rownum>10;
select rownum from test where rownum between 2 and 4;
//均返回0条。根据ROWNUM定义,不难看出,返回第1条记录时,因ROWNUM=1,因此过滤掉。

rownum应用:
1)可通过ROWNUM限制返回结果的记录数(行数)
                     SQL> select rownum from test where rownum<10;
2)通过ROWNUM为表中某列产生一个唯一(UNIQUE)值
                     SQL> UPDATE table_name SET column_name = ROWNUM;
                     //将rownum指定为该行某列的值。
3) 依靠重命名列, 和子查询可以实现rownum>10的查询
select count(*) from (select t.*,rownum rn from ljb_test t) where rn>1;
阅读(399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~