使用:rownum关键字:oracle对外提供的自动给查询结果编号的关键字,与每行的数据没有关系。
--注意:rownum关键字只能做< <=的判断,不能进行> >=的判断
select rownum ,e.* from emp e;
--查询员工信息的前5条数据 第一页数据
select rownum r,e.* from emp e where rownum <=5;
select * from (select rownum r,e.* from emp e where rownum <=5) t where r>0;
--查询员工信息的6-10条数据 第二页数据
select rownum r,e.* from emp e where rownum <=10;
select rownum,t.* from (select rownum r,e.* from emp e where rownum <=10) t where r>5;
--查询员工信息的11-15条数据 第三页数据
select rownum r,e. * from emp e where rownum<=15;
select * from (select rownum r,e. * from emp e where rownum<=15) t where r>10;
--分页规律总结:每页显示m条数据,查询第n页数据
select * from (select rownum r,e. * from 要分页的表 e where rownum<=m*n) t where r>m*n-m ;
--要分页的表既可以是真实的表,也可以是一个查询语句
--分页查询员工信息按照工资排序
select * from (select rownum r,t.* from (select * from emp order by sal) t where rownum<=10 ) where r>5
常用关系数据库分页SQL都是不相同的,不过大同小异
下面是Oracle分页简单事例图片以及代码:
1、普通查询:
select*fromtable_Nametorderbyactive_countdesc;
2、查询第一条记录:
select*
from(select*fromtable_Nameorderbyactive_countdesc)
whererownum=1;
3、查询前3条:类似Sqlserver中的TOP3
select*
from(select*fromtable_Nameorderbyactive_countdesc)
whererownum<=3;
4、查询第2至第3条记录:
select*
from(selectt.*,rownumasno
from(select*fromtable_Nameorderbyactive_countdesc)t)
wherenobetween2and3
5、在TOP3条记录的基础上查询第2至第3条记录:
select*
from(selectt.*,rownumasno
from(select*fromtable_Nameorderbyactive_countdesc)twhererownum<=3)
wherenobetween2and3
6、查询第2条以后的记录:
select*
from(selectt.*,rownumasno
from(select*fromtable_Nameorderbyactive_countdesc)t)
whereno>=2
解释:
rownum是在已产生数据的基础上伪生成的编号,所以使用rownum必须在已有数据的基础上,因此Oracle分页才加入了多个子查询。