Oracle认证:rownum的使用
来源:优易学  2011-11-4 16:05:23   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  SQL> select * from(select rownum,id,name from student)where rownum>2;

  ROWNUM ID     NAME

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

  (3)rownum对于小于某值的查询条件

  如果想找到第三条记录以前的记录,当使用rownum<3是能得到两条记录的。显然rownum对于rownum<n((n>1的自然数)的条件认为是成立的,所以可以找到记录。

  SQL> select rownum,id,name from student where rownum <3;

  ROWNUM ID     NAME

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

  1 200001 张一

  2 200002 王二

  综上几种情况,可能有时候需要查询rownum在某区间的数据,那怎么办呀从上可以看出rownum对小于某值的查询条件是人为true 的,rownum对于大于某值的查询条件直接认为是false的,但是可以间接的让它转为认为是true的。那就必须使用子查询。例如要查询rownum 在第二行到第三行之间的数据,包括第二行和第三行数据,那么我们只能写以下语句,先让它返回小于等于三的记录行,然后在主查询中判断新的rownum的别名列大于等于二的记录行。但是这样的操作会在大数据集中影响速度。

  SQL> select * from (select rownum no,id,name from student where rownum<=3 ) where no >=2;

  NO ID     NAME

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

  2 200002 王二

  3 200003 李三

  (4)rownum和排序

  Oracle中的rownum的是在取数据的时候产生的序号,所以想对指定排序的数据去指定的rowmun行数据就必须注意了。

  SQL> select rownum ,id,name from student order by name;

  ROWNUM ID     NAME

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

  3 200003 李三

  2 200002 王二

  1 200001 张一

  4 200004 赵四

  可以看出,rownum并不是按照name列来生成的序号。系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。为了解决这个问题,必须使用子查询

  SQL> select rownum ,id,name from (select * from student order by name);

  ROWNUM ID     NAME

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

  1 200003 李三

  2 200002 王二

  3 200001 张一

  4 200004 赵四

  这样就成了按name排序,并且用rownum标出正确序号(有小到大)

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训