oracle中rownum的使用Oracle认证考试
文章作者 100test 发表时间 2009:10:07 18:18:28
来源 100Test.Com百考试题网
"tbbnc">
在Oracle中,要按特定条件查询前N条记录,用个rownum就搞定了。
0select * from emp where rownum <.= 5
而且书上也告诫,不能对rownum用">.",这也就意味着,如果你想用
0select * from emp where rownum >. 5
则是失败的。要知道为什么会失败,则需要了解rownum背后的机制:
1 Oracle executes your query.
2 Oracle fetches the first row and calls it row number 1.
3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row.
4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).
5 Go to step 3.
了解了原理,就知道rownum>.不会成功,因为在第三步的时候查询出的行已经被丢弃,第四步查出来的rownum仍然是1,这样永远也不会成功。
同样道理,rownum如果单独用=,也只有在rownum=1时才有用。
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例说明:
例如表:student(学生)表,表结构为:
ID char(6) --学号
name VARCHAR2(10) --姓名
create table student (ID char(6), name VARCHAR2(100)).
insert into sale values( 200001 ,‘张一’).
insert into sale values( 200002 ,‘王二’).
insert into sale values( 200003 ,‘李三’).
insert into sale values( 200004 ,‘赵四’).
commit.