您的位置:首页 > 数据库 > Oracle

Oracle,MySql,SQL server分页

2016-04-11 13:43 375 查看
给学生讲到了JSP里简单的分页,学生会问每种数据库分页的不同,现总结如下 ¬

SQL Server ¬

从数据库表中的第M条记录开始取N条记录,利用Top关键字:注意如果Select语句中既有top,又有order by,则是从排序好的结果集中选择: ¬

select top @pagesize * from table1 where id not in (select top @pagesize*(@page-1) id from table1 order by id) order by id ¬

当然也可以写存储过程: ¬

CREATE PROCEDURE [Zhzuo_GetItemsPage] ¬

@PageIndex INT, /*@PageIndex从计数,0为第一页*/ ¬

@PageSize INT, /*页面大小*/ ¬

@RecordCount INT OUT, /*总记录数*/ ¬

@PageCount INT OUT /*页数*/ ¬

AS ¬

/*获取记录数*/ ¬

SELECT @RecordCount = COUNT(*) FROM Production.Product ¬

/*计算页面数据*/ ¬

SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize) ¬

/*TOP记录数*/ ¬

DECLARE @TOPCOUNT INT ¬

SET @TOPCOUNT = @RecordCount - @PageSize * @PageIndex ¬

DECLARE @SQLSTR NVARCHAR(1000) ¬

IF @PageIndex = 0 OR @PageCount <= 1 ¬

BEGIN ¬

SET @SQLSTR =N'SELECT TOP '+STR(@PageSize)+ ¬

'ProductID,Name FROM Production.Product ORDER BY ProductID DESC' ¬

END ¬

ELSE ¬

BEGIN ¬

IF @PageIndex = @PageCount - 1 ¬

BEGIN ¬

SET @SQLSTR =N'SELECT * FROM ( SELECT TOP ' + STR(@TOPCOUNT) + ¬

'ProductID,Name FROM Production.Product ORDER BY ProductID ASC) T ORDER BY ProductID DESC' ¬

END ¬

ELSE ¬

BEGIN ¬

SET @SQLSTR =N' SELECT TOP '+STR(@PageSize)+'* FROM (SELECT TOP ' + STR(@TOPCOUNT) + ¬

'ProductID,Name FROM Production.Product ORDER BY ProductID ASC) T ORDER BY ProductID DESC' ¬

END ¬

END ¬

/*执行*/ ¬

EXEC (@SQLSTR) ¬

Oralce数据库 ¬

从数据库表中第M条记录开始检索N条记录 ¬

SELECT * ¬

FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2 ¬

where t2.r >= M ¬

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下: ¬

SELECT * ¬

FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2 ¬

Where t2.R >= 10 ¬

My sql数据库 ¬

My sql数据库最简单,是利用mysql的LIMIT函数,LIMIT [offset,] rows从数据库表中M条记录开始检索N条记录的语句为: ¬

SELECT * FROM 表名称 LIMIT M,N ¬

例如从表Sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下: ¬

select * from sys_option limit 10,20 ¬

SQL Server2005 ¬

2005下新的功能,实现的分页存储过程功能更加简单明了,而且更加容易理解。注意这里的ProductID为主键,根据ProductID进行排序生成ROW_NUMBER,通过ROW_NUMBER来确定具体的页数。 ¬

CREATE PROCEDURE [dbo].[Zhzuo_GetItemsPage2005] ¬

@PageIndex INT, ¬

@PageSize INT, ¬

@RecordCount INT OUT, ¬

@PageCount INT OUT ¬

AS ¬

/*获取记录数*/ ¬

SELECT @RecordCount = COUNT(*) FROM Production.Product ¬

/*计算页面数据*/ ¬

SET @PageCount = CEILING(@RecordCount * 1.0 / @PageSize) ¬

/* 基于SQL SERVER 2005 */ ¬

SELECT SerialNumber,ProductID,Name FROM ¬

(SELECT ProductID,Name,ROW_NUMBER() OVER (ORDER BY ProductID DESC) AS SerialNumber FROM Production.Product ) AS T ¬

WHERE T.SerialNumber > (@PageIndex * @PageSize) and T.SerialNumber <= ((@PageIndex+1) * @PageSize)¬
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: