各大数据库分页/及底层的区别的实现

1.mySql/postgreSql:从0开始计数。

 例子:
 第0页, 第1页 ,第2页 ,。。。。。,   第n页
 数据0—-9,10——19,20——29,。。。。。,n*10——(n+1)*10-1
 1.1,通式: limit 开始,多少条
 1.2,select 对象 from 表 limit 页数*页面大小,页面大小。举例:select * from 表 limit n*10,10

2.oracle/sqlserver是从1开始计数。

2.0,oracle实现分页(rownum)
例子:
第1页, 第2页 ,第3页 ,。。。。。,   第n页
数据1—-10,11——20,21——30,。。。。。,(n-1)*10+1——n*10
 2.0.1,oracle里面是没有limit关键字的。
 2.0.2,通式:select 加上条件选择
 2.0.3,select * from student t where sno>=(n-1)*10+1 and sno<=n*10;此种写法必须sno是连续的不能中断。
 2.0.3,select rownum,t * from student t where rownum>=(n-1)*10+1 and rownum<=n*10;此种写法有两种问题:
 其一,如果根据sno排序,则rownum会混乱,解决方案:分开使用—>先只排序,再只查询rownum。
 select * from
 (select rownum r,t.* from 
     (select s.* from student s order by sno asc) t rownum<=n*10 ) 
     ) where r>=(n-1)*10+1
    注解: rownum<=n*10,这是优化一次查询的个数。
 其二,rownum有一个特性,不能查询rownum>7等类型


2.1.0 ,sqlserver实现分页(row_number())。
2.1.1,row_number() over (字段);
select * from
 (select row_number() over (sno order by sno asc) as r,*  from 
     (select s.* from student s order by sno asc) t r<=n*10 ) 
     ) where r>=(n-1)*10+1 

3,分页的实现:

    5个变量属性:                                       举例数字
    数据总数(count),sql查询总数。                     100 /103
    页面大小(自定义),                                    10
    总页数(自动计算):
          总页数 = 100/10=页面总数据/页面大小;
          总页数 = 103/10=页面总数据/页面大小+1;
          .。。。。。。。
        总结:  总页数 = 页面总数据%页面大小==0?页面总数据/页面大小:页面总数据/页面大小+1;
    当前页页码(用户自定义),
    当前页的对象集合 ,                                  学生表 list<student>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值