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;
由上图可以看到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