Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91213
  • 博文数量: 99
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 21:29
文章分类

全部博文(99)

文章存档

2013年(5)

2012年(94)

我的朋友

分类:

2012-06-09 13:08:02

原文地址: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;
阅读(382) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~