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;
阅读(4387) | 评论(0) | 转发(3) |