1、rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。

如:将rownum限制为1,这样就只能查询出一条记录。

select rownum,id,name from student where rownum=1

2、rownum值的分配是在查询的谓词解析之后,任何排序和聚合之前进行的。ROWNUM值只有当被分配之后才会增长。rownum的排序是根据insert记录的顺序显示的。

select rownum,tmp.* 
  from (select c1,c2 from a order by a.c1) tmp
  where rownum<=3;

3、子查询中的rownum必须保留别名,对于子查询,则rownum的顺序是根据子查询的查询顺序进行动态分配的,例如:

select rownum as t2_rn, t2.* from (select rownum as t1_rn , t1.* from emp t1 order by t1.sal) t2;

Oracle(00):rownum行号_字段名

由上图可以看到T1_RN和T2_RN的区别。

t1中的rownum是根据emp这个基表的默认顺序分配的,而内层子循环是根据SAL字段进行排序,所以t2的rownum是根据内层子查询的记录顺序分配的。

4、分页查询

获取第语文成绩有潜力提升到高分阶段的批次记录,比如第6名到第10名的记录:

select MyGrade.*
  from (select G.*, rownum rn
         from (select g.* from grade g order by chinese) G
         where rownum <= 10) MyGrade
 where MyGrade.rn >= 6;

分页查询语句:

1:单表查询

select * from (select t.*,rownum r from table t where ROWNUM <= pageNumber*pageSize) 
         where r >(pageNumber)*pageSize

2:两张表联查

select * from (select rownum RN,XX.* from (select 表名.字段名, 表名.字段名, 表名.字段名... from TABLE1  t1, TABLE2   t2 where t1.字段=t2.字段) XX 
                                     where ROWNUM<=pageSize*pageNumber)
          where RN >(pageNumber-1)*pageSize