三种数据库的sql分页

4 篇文章 0 订阅

mysql
    /*

    * sql:可以是单表的查询语句,也可以是多表的联合查询语句

    * firstIndex:其实的索引

    * pageSize:每页显示的记录数

    */
    select o.* from (sql) o limit firstIndex,pageSize
    /**
    *选择21-60的数据
    **/
    例如:select o.* from (select * from user) o limit 20,40

sqlserver
    /*

    * firstIndex:起始索引


    * pageSize:每页显示的数量

    * orderColumn:排序的字段名

    * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句

    */

    select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(sql) as o where rownumber>firstIndex;
    
oracle
    /*
    
    *oracle的分页查询方法相对来说要多点,ROWNUM、row_number(),今天主要将两种效率稍好的分页查询语句。

    * firstIndex:起始索引

    * pageSize:每页显示的数量

    * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句

    */
    ①ROWNUM查询分页通式:
    select * from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) where rn>firstIndex
    
    例如:select * from (select a.*,ROWNUM rn from(select * from user) a where ROWNUM<20) where rn>0
    
    SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM DONORINFO t WHERE ROWNUM <= page*size) table_alias WHERE table_alias.rowno > (page-1)*size;    
    如果需要使用order by必须先执行排序,如下:
    SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM (select * from DONORINFO order by t.id) t WHERE ROWNUM <= page*size) table_alias WHERE table_alias.rowno > (page-1)*size;
    
    ②row_number()解析函数分页查询通式:
    
    /*

     * firstIndex:起始索引

     * pageSize:每页显示的数量

     * partition by 分组
     
     * order by 排序
     
     * 当以上两个关键字出现的时候,先分组,后编号排序
     
     * orderColumn:排序的字段名

     * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句

     */
    select * from(select * from(select t.*,row_number() over(order by orderColumn) as rownumber from(sql) t) p where p.rownumber>firstIndex) where rownum<=pageSize
    
    
    SELECT xx.* FROM( SELECT t.*,row_number() over(ORDER BY o_id)AS num FROM t_order t )xx WHERE num BETWEEN 5 AND 15; --返回第5-15行数据 效率比前者低
    
    
    注意:
        1、ROWNUM

      rownum总是从1开始的,第一条不满足去掉的话,第二条的rownum 又成了1。依此类推,所以永远没有不满足条件的记录。

        可以这样理解:rownum是一个序列,是Oracle数据库从数据文件或缓冲区中读取数据的顺序。

        它取得第一条记录则rownum值为1,第二条为2。依次类推。

        当使用“>、>=、=、between...and”这些条件时,从缓冲区或数据文件中得到的第一条记录的rownum为1,不符合sql语句的条件,会被删除,接着取下条。

        下条的rownum还会是1,又被删除,依次类推,便没有了数据。

       所以上限条件必须放在子查询,而下限条件必须放在外层查询。
    
    
    
    
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值