分页这个功能,可以说在开发中经常会用到,今天刚学习完oracle的分页,所以总结一下学过的各个数据库的分页
为了讲述方便,以下分页都是查询出员工表emp中的第5条到第8条记录
--------------------------------------------------------------------------------
1.MySQL中的分页实现
MySQL的分页可谓是简单粗暴,一个limit 就能解决
select * from emp order by sal limit 4,3
注:limit(m,n)从第m条开始起的n条记录,m从0开始,所以上面是4,3
-----------------------------------------------------------------------------------
2. SqlServer 中的分页实现
我不知道这个有没有具体的分页函数,记得当时做课设的时候,因为没有limit,所以就用了两个top来凑,具体sql语句如下:
select top 8 * from emp order by sal where eno not in
(select top 4 eno from emp order by sal);
先查出top8的集合,再消掉top4的集合中的,就是5到8了
---------------------------------------------------------------------
3.oracle中的分页实现
oracle中的就有点蛋疼,因为oracle中虽然有一个rownum,但是这个rownum不随排序的改变而改变,也就是说原来行号为5的记录的工资最高,但是order by之后,他的行号还是5。所以我们只能采用一点小技巧,把它select到一个新表
select *
from (select rownum r,e1.*
from (select * from emp order by sal) e1
where rownum <=5+3
)
where r >=5;
注意:因为oracle本身的rownum的设计是
一行一行取值的,所以where中的rownum只能<=,不能>。如果要>,要给rownum起个
引用别名r