Oracle,MySql,SQL server分页

来源:互联网 发布:会员数据分析方法 编辑:程序博客网 时间:2024/05/21 01:45
给学生讲到了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)¬
1 0
原创粉丝点击