Oracle、MySql、SQLServer 数据分页查询
2015-12-18 17:33
991 查看
最近简单的对oracle,mysql,sqlserver2005的数据分页查询作了研究,把各自的查询的语句贴出来供大家学习.....
(一)、 mysql的分页查询
mysql的分页查询是最简单的,借助关键字limit即可实现查询,查询语句通式:
如下面的截图,每页显示的记录数为20:
查询(1-20)这20条记录
![](http://images.cnitblog.com/blog/75922/201310/30101940-7f9ae209ff1e456281bb5035b89bb045.x-png)
查询(21-40)这20条记录
![](http://images.cnitblog.com/blog/75922/201310/30102058-4f5696f75d8845428905f1cb1481afc8.x-png)
mysql的分页查询就这么简单......
(二)、sqlserver2005的分页查询
在sqlserver2005之前一直借助top关键字来实现分页查询,不过效率低,在sqlserver2005及其之后的版本都使用row_number()解析函数来完成分页查询,效率有了很大的提高,不过sql语句比较复杂,下面给出分页查询的通式:
下面看截图,每页显示20条记录数:
查询(1-20)这20条记录
![](http://images.cnitblog.com/blog/75922/201310/30103412-9aad1c40009742b1a2ccc958c1ba69f8.x-png)
查询(21-40)这20条记录
![](http://images.cnitblog.com/blog/75922/201310/30103545-fcbf02561a1b4ec993258151f3dc360e.x-png)
知道了sqlserver中的row_number函数,分页也就简单了.....
(三)、oracle分页查询
接下来重点说说oracle的分页查询,oracle的分页查询方法相对来说要多点,ROWNUM、row_number(),今天主要将两种效率稍好的分页查询语句。
①ROWNUM查询分页通式:
以下截图是以这种方式进行的查询语句:
查询(1-21)这20条记录*****(没有ID=6的记录,所以查询到的最大ID为21)
![](http://images.cnitblog.com/blog/75922/201310/30105617-3d90a1c79b7f472d981fbee9d27f7631.x-png)
查询(22-41)这20条记录*****(没有ID=6的记录,所以开始查询到的ID为22,以及最大ID为41)
![](http://images.cnitblog.com/blog/75922/201310/30105913-74d7e1184e0b415480e2e9ec8cd076b0.x-png)
②row_number()解析函数分页查询通式:
以下截图是使用row_number()方式的分页查询效果:
查询(1-21)这20条记录*****(没有ID=6的记录,所以查询到的最大ID为21)
![](http://images.cnitblog.com/blog/75922/201310/30110815-1af99e3b09d24d6ab58df38a2dd2861d.x-png)
查询(22-41)这20条记录*****(没有ID=6的记录,所以开始查询到的ID为22,以及最大ID为41)
![](http://images.cnitblog.com/blog/75922/201310/30110854-f13e9a70a6394e5785d2eb948a410cf5.x-png)
对于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条记录,效率自然会慢很多....
(一)、 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条记录,效率自然会慢很多....
相关文章推荐
- Oracle EBS R12 XML数据表格的Excel脚本报表
- Calling an Oracle function from SQL Server Linked Server
- Linux下ORACLE使用RMAN备份指定数据库
- Oracle IO 校准
- oracle缩小表空间
- oracle group by rollup实现小计、合计
- oracle给表进行分区
- Oracle PL/SQL 存储过程
- oracle 获取最大日期记录
- 程序向oracle插入数据错误:can bind a LONG value only for insert into a LONG column
- oracle行转列函数以及一些窗口函数(PIVOT ,OVER)
- 【重磅干货】看了此文,Oracle SQL优化文章不必再看!
- Oracle 一行拆分为多行
- Oracle中,将毫秒数转换为timestamp类型的两种方法
- Oracle中如何进行进制转换(2进制,10进制,16进制)
- oracle 根据出生日期计算精确年龄
- ORACLE 36进制和10进制,互相转换函数
- Oracle 11g对依赖的推断达到字段级
- C#连接Oracle的问题(不安装客户端)
- 【C/C++学院】(24)Oracle数据库编程--管理oracle