zoukankan      html  css  js  c++  java
  • Oracle、MySql、SQLServer 数据分页查询

    Oracle、MySql、SQLServer 数据分页查询

    摘自:http://www.cnblogs.com/wangyong/p/3396333.html

    近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习.....

           (一)、 mysql的分页查询

            mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式:

    复制代码
    /*
    
    * sql:可以是单表的查询语句,也可以是多表的联合查询语句
    
    * firstIndex:其实的索引
    
    * pageSize:每页显示的记录数
    
    */
    
    select o.* from (sql) o limit firstIndex,pageSize
    复制代码

    如下面的截图,每页显示的记录数为20:

                                                      查询(1-20)这20条记录

                                                 查询(21-40)这20条记录

            mysql的分页查询就这么简单......

      (二)、sqlserver2005的分页查询

        在sqlserver2005之前一直借助top关键字来实现分页查询,不过效率低,在sqlserver2005及其之后的版本都使用row_number()解析函数来完成分页查询,效率有了很大的提高,不过sql语句比较复杂,下面给出分页查询的通式:

    复制代码
    /*
    * 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;
    复制代码

     下面看截图,每页显示20条记录数:

                                                                 查询(1-20)这20条记录

                                                             查询(21-40)这20条记录

        知道了sqlserver中的row_number函数,分页也就简单了.....

      (三)、oracle分页查询

        接下来重点说说oracle的分页查询,oracle的分页查询方法相对来说要多点,ROWNUM、row_number(),今天主要将两种效率稍好的分页查询语句。

        ①ROWNUM查询分页通式:

    复制代码
    /*
    
    * firstIndex:起始索引
    * pageSize:每页显示的数量

    * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
    */
    select * from(select a.*,ROWNUM rn from(sql) a where ROWNUM<=(firstIndex+pageSize)) where rn>firstIndex
    复制代码

    以下截图是以这种方式进行的查询语句:

                                                              查询(1-21)这20条记录*****(没有ID=6的记录,所以查询到的最大ID为21)

                                                           查询(22-41)这20条记录*****(没有ID=6的记录,所以开始查询到的ID为22,以及最大ID为41)

        ②row_number()解析函数分页查询通式:

    复制代码
     /*

    * firstIndex:起始索引

    * pageSize:每页显示的数量
    * 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
    复制代码

     以下截图是使用row_number()方式的分页查询效果:

                                                              查询(1-21)这20条记录*****(没有ID=6的记录,所以查询到的最大ID为21)

                                                        查询(22-41)这20条记录*****(没有ID=6的记录,所以开始查询到的ID为22,以及最大ID为41)

          对于oracle的分页查询,特地选出这两种实现方式是因为这两者各有千秋

         首先, 我们知道在ROWNUM查询的方式中,在第二层的sql语句中有个"where ROWNUM<firstIndex+pageSize",根据oracle的原则,第二层查询语句会嵌入到最内层中进行查询,也就是说,最开始执行的查询语句类似于:select * from wyuse where rownum<(firstIndex+pageSize) order by id asc,从数据表中查询出(firstIndex+pageSize)条记录,所以如果这个值很小的话,效率会很好,如果对于大数据量的表单,这个值如果是上千,比如:select * from wyuse where rownum<(5000) order by id asc,这样一开始会选出5000条记录,效率自然会慢很多....

         不过,相对于ROWNUM,row_number()方式可能通过简化可以少一层嵌套,不过貌似对于大数量的查询,效率也高不到哪里去.....不过,对于大数量如果为表建立索引再结合row_number()效果会很好(未测试)

  • 相关阅读:
    python configparser模块
    python shutil模块
    软件架构百度百科
    设计模式
    python Sys module
    python time module
    对别人的敬仰就是对自己的信心。数据和计算给了人类史无前例的巨大能力,也带来了前所未有的未知,挑战着人类的自信。
    阿波罗计划里最了不起的就是自信心,这份自信,比任何事情都重要。到今天为止,我觉得美国这个国家做的最有领导力的事情就是阿波罗登月计划。今天我们享受的很多科技,从通信技术到生物医疗,再到材料以及其他很多东西,都要感谢阿波罗登月计划打下的非常好的基础。
    打一个不太恰当的比方,我们与技术的关系就像是农夫与蛇。什么是对技术的热爱?你真的相信技术会改变很多东西吗?你有没有足够的自信和热爱,去捂暖这条蛇,哪怕它苏醒以后可能会咬你一口?
    人们熟知的一句名言是:“天才是1%的灵感加99%的汗水。”可如果没有那1%的灵感,世界上所有的汗水也就仅仅是一桶汗水而已。
  • 原文地址:https://www.cnblogs.com/nov5026/p/4547410.html
Copyright © 2011-2022 走看看