`

各种常见数据库分页实现

阅读更多
  因为数据量过大,如果一次性查询会耗用大量时间以及性能,因此对数据进行分页显示变得尤为重要,以下就列出一些常用数据库的sql分页实现。

1.MySQL实现分页
MySQL实现分页效果比较简单,只有一个limit关键字就可以解决。

示例:SELECT username,password FROM tb_user WHERE id = 1 LIMIT 100,10;
具体:select * from tableName where 条件 limit 当前页码*页面容量-1,页面容量

2.Oralce实现分页

SELECT *
  FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM tableName order by id) A WHERE ROWNUM <=20)
WHERE RN >= 11;

select count(*) from tableName where 条件


3.Sqlserver实现分页

sqlserver由于版本的不同,分页的实现方式也各不相同。

SQL 2000 用临时表解决,通过在临时表中增加自增列解决RowNumber。
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050

CREATE TABLE #employees (RowNumber INT IDENTITY(1,1),
LastName VARCHAR(100),FirstName VARCHAR(100),
EmailAddress VARCHAR(100))

INSERT INTO #employees (LastName, FirstName, EmailAddress)
SELECT LastName, FirstName, EmailAddress
FROM Employee
ORDER BY LastName, FirstName, EmailAddress
SELECT LastName, FirstName, EmailAddress
FROM #employees
WHERE RowNumber > @Start AND RowNumber <= @End

DROP TABLE #employees

GO  

SQL 2005/2008 由于支持了Row_Number于是通过派生表的方式解决(两个嵌套)
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050

SELECT LastName, FirstName, EmailAddress
FROM (SELECT LastName, FirstName, EmailAddress,
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber
FROM Employee) EmployeePage
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY LastName, FirstName, EmailAddress
GO
  

SQL 2005/2008 或者用CTE的方式实现,和派生表一样,就是好看点,执行计划都一样。
DECLARE @Start INT
DECLARE @End INT
SELECT @Start = 14000,@End = 14050;
WITH EmployeePage AS
(SELECT LastName, FirstName, EmailAddress,
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber
FROM Employee)
SELECT LastName, FirstName, EmailAddress
FROM EmployeePage
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY LastName, FirstName, EmailAddress
GO
  
SQL SERVER 2012 比较给力支持了OFFSET,于是一个Select结束战斗,另外在2012里,如果前面加上TOP(50),那么执行计划就会少读很多行数据(读的精准了),提高性能。
SELECT top(50) LastName, FirstName, EmailAddress
FROM Employee
ORDER BY LastName, FirstName, EmailAddress
OFFSET 14000 ROWS
FETCH NEXT 50 ROWS ONLY;

4.DB2实现分页
Db2实现分页与SQL Server类似, 但是可以不对资料排序(起始位置从1开始)

对资料排序
select * from (
    select t.*, ROW_NUMBER() OVER(ORDER BY CARD_ID asc) AS ROWNUM from CARD t ) a
where ROWNUM > 20 and ROWNUM <=30

不对资料排序
select * from (
    select t.*, ROW_NUMBER() OVER() AS ROWNUM from CARD t ) a
where ROWNUM > 20 and ROWNUM <=30


以上为各种常见数据库分页语句,留存备用。
0
0
分享到:
评论
1 楼 chinahuyong 2015-02-17  
可以看下我的博客

相关推荐

    三大数据库分页的实现

    我们在编写MIS系统和Web应用程序等系统时,都涉及到与数据库的交互,如果数据库中...根据自己使用过的内容,把常见数据库Sql Server,Oracle和My sql的分页语句,从数据库表中的第M条数据开始取N条记录的语句总结如下:

    mysql, oracle等常见数据库的分页实现方案

    1.Oracle:  select * from ( select row_.*, rownum rownum_ from ( query_SQL ) row_ where rownum == min  2.SQL Server:  select top @pagesize * from tablename where id not in (select top @pagesize*...

    asp.net实现access数据库分页的方法

    asp.net操作access数据库是常见的数据库操作应用,本文就来实例讲解一下asp.net实现access数据库分页的方法。希望对大家的asp.net程序设计能有所帮助。 具体实例代码如下: 总...

    JSP分页技术实现.mht

     其它常见的方法还有每次翻页都查询一次数据库,从ResultSet中只取出一页数据(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录)。这种方式在某些数据库(如oracle)的JDBC实现中...

    Oracle数据库、SQL

    十五、 排名分页问题 30 15.1什么是rownum 30 15.2 where rownum的执行过程 30 15.3 where rownum=5的执行过程 30 十六、 约束constraint 31 16.1约束的类型 31 16.2 primary key:主键约束 31 16.3 not null:非空...

    很好的一个jsp分页

     其它常见的方法还有每次翻页都查询一次数据库,从ResultSet中只取出一页数据(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录)。这种方式在某些数据库(如oracle)的JDBC实现中...

    jsp数据分页源代码

    该控件采用JSP的include实现常见的数据分页,支持oracle,sql server,mysql 等数据库,可以直接用于项目。

    Ext3.2的TreePanel和GridPanel的分页与Hibernate的分页功能的影射

    在使用表格的分页功能时,我们把该控件的start与limits参数与Hibernate的分页功能影射,从页实现了动态的分页效果;而TreePanel的更新也是一个比较常见的问题,当我们点击测试按钮时,TreePanel会请求远程服务器的...

    SQL Server 的通用分页显示存储过程

    建立一个 Web 应用,分页浏览功能必不可少。这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。

    C#操作SQLite数据库帮助类详解

    主要介绍了C#操作SQLite数据库帮助类,详细分析了C#针对sqlite数据库的连接、查询、分页等各种常见操作的实现与封装技巧,需要的朋友可以参考下

    pager-taglib 分页扩展实例

    pager-taglib 是个很好的jsp分页标签,使用它结合jstl可以实现灵活的分页导航功能。在实际的开发中post方式的提交比较常见,本人做了一个比较通用的基于post方式的一个应用。主要实现一下功能: 1.添加输入跳转、每...

    php实现分页功能的详细实例方法

    分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果。 首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jereh...

    Struts开发实例

    10、如何在Struts 数据库应用程序中实现分页显示 11、如何在Struts 数据库应用程序中实现记录的删除、更新及链接 12、如何在Struts 数据库应用程序中实现记录的添加 13、如何建立一个带登陆页面的Struts数据库应用...

    Struts开发实例.rar

     10、如何在Struts 数据库应用程序中实现分页显示;  11、如何在Struts 数据库应用程序中实现记录的删除、更新及链接;  12、如何在Struts 数据库应用程序中实现记录的添加;  13、如何建立一个带登陆页面的...

    C#开发基于FreeSql多库分布式事务、跨库查询、跨库分页查询、跨库增删改等功能实现源码+项目说明+sln.zip

    既然分库了 分布式事务怎么处理,说到分布式事务 常见的解决方案有TCC/SAGA/消息队列最终一致性,在.NET生态中有基于消息队列实现的分布式事务 [CAP](https://github.com/dotnetcore/CAP) ,TCC和SAGA调研了很久没有...

    分页技术原理与实现之分页的意义及方法(一)

     下页显示了两种常见的分页方式: 分页的意义  分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如果不顾一切的Select...

    JSP分页(技术)代码

     其它常见的方法还有每次翻页都查询一次数据库,从ResultSet中只取出一页数据(使用rs.last();rs.getRow()获得总计录条数,使用rs.absolute()定位到本页起始记录)。这种方式在某些数据库(如oracle)的JDBC实现中...

    基于ThinkPHP5实现的图书查询借阅管理网站+源代码+文档说明+数据库(高分课程设计)

    ThinkPHP5图书管理系统实现了常见字段比如字符串,整型,浮点型,日期型,图片型和文件型的添删改查,查询条件采用多条件组合模糊查询,查询结果都采用分页显示,其中字符串分为单行文本字符串,多行文本字符串已经...

    关于使用存储过程创建分页

    这个问题是数据库处理中十分常见的问题。经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页。但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放...

    Nacos2.2版本数据库适配插件.zip

    当前项目插件目前已简单适配Postgresql,并抽象了一套常见的兼容项的方言类,开发者可以基于该设计,实现自定义分页逻辑即可。 如需Nacos2.1支持,请移步个人之前创建这个仓库,该仓库目前支持PostgreSQL、Oracle、...

Global site tag (gtag.js) - Google Analytics