加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver oracle mysql 分页查询

发布时间:2020-12-12 13:25:49 所属栏目:MsSql教程 来源:网络整理
导读:? ?最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习..... ???? ?? ? (一)、 ?mysql的分页查询 ????????mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式: /* * sql:可以是单表

? ?最近简单的对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 sql) a where ROWNUM<=(firstIndex+pageSize)) where rnfirstIndex 以下截图是以这种方式进行的查询语句:

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

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

?

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

复制代码

 /* * firstIndex:起始索引 
 * pageSize:每页显示的数量 
 * orderColumn:排序的字段名  * sql:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句 
 */
select select select t.as rownumber sql) t) p where p.rownumberfirstIndex) where rownum<= ?以下截图是使用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()效果会很好(未测试)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读