mysql分页:
从0开始计数
第0页:
select * from student limit 0,10;
第1页:
select * from student limit 10,10;
第2页:
select * from student limit 20,10;
第n页:
select * from student limit 页数*页面大小,页面大小;
oracle分页:
从1开始计数:
了解oracle分页前,我们要了解oracle中的rownum的用法。
rownum伪列,将一组数据从1开始计数,直到最后一位。但是rownum只能查询小于其本身的数据,不能查询大于其本身的数据。
第n页:
select * from
(
select rownum r, t.*
from
(select s.* from student s order by sno asc) t
where r<=n*10
)
where r>=(n-1)*10+1 and r<=n*10;
SQLServer分页
SQLServer2003之后支持
top:
select top 页面大小 * from student where id not in
(
select top (页数-1) * 页面大小 id from student order by sno asc
)
SQLServer2005之后支持
row_number:
SQLServer中的row_number和oracle中的rownum相似,但是要对一个列进行预处理操作
第n页:
select * from
(
select row_number() over (sno order by sno asc) as r, t.* from student t
where r<=n*10
)
where r>=(n-1)*10+1 and r<=n*10;
SQLServer2012之后支持
offset fetch next rows only:
select * from student order by sno
offset (页数-1)*页面大小+1 fetch next 页面大小 rows only;
总结
SQLServer中的row_number分页sql与Oracle分页sql的区别:
1、变量名称不同:
Oracle的名称为rownum
SQLServer的名称为row_number()
2、Oracle需要排序(为了排序,单独写了一个子程序)
SQLServer可以省略该排序的子查询,因为SQLServer中可以通过over()直接排序