数据库分页(mysql,sqlserver,oracle)

Mysql分页:

         select * from tableName where 条件 limit 当前页码*页面容量-1 , 页面容量

 

sqlserver 分页

思路:一般会写成一个存储过程 首先要确定的是一页你打算要多少条数据,然后可以计算出总共有多少页
这样就可以你只需要向存储过程穿进去一个参数,就是要第几页就可以实现分页功能了。
具体的sql语句如下: 方法1: 适用于 SQL Server 2000/2005

SELECT TOP 页大小 *FROM table1 WHERE id NOT IN           (           SELECT TOP 页大小*(-1) id FROM table1 ORDER BY id           ) ORDER BY id

方法2: 适用于 SQL Server 2000/2005

SELECT TOP 页大小 *FROM table1 WHERE id >           (           SELECT ISNULL(MAX(id),0          FROM                  (                 SELECT TOP 页大小*(-1) id FROM table1 ORDER BY id                 ) A           ) ORDER BY id

方法3: 适用于 SQL Server 2005

SELECT TOP 页大小 *  FROM          (         SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1         ) A WHERE RowNumber > 页大小*(页数-1)

说明,页大小:每页的行数;页数:第几页。使用时,请把“页大小”和“页大小*(页数-1)”替换成数字。

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。 建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:

分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句

分页方案一:(利用Not In和SELECT TOP分页)   效率次之,需要拼接SQL语句

分页方案三:(利用SQL的游标存储过程分页)    效率最差,但是最为通用

 

oracle分页

①采用rownum 关键字( 三层嵌套)

SELECT * FROM (   SELECT A.*,ROWNUM   num FROM   (SELECT * FROM t_order)A   WHERE   ROWNUM <= 15 ) WHERE num>= 5 ;

 

②采用row_number 解析函数进行分页( 效率更高)

SELECT xx.* FROM ( SELECT t.*,row_number() over(ORDER BY o_id)AS num FROM t_order t )xx WHERE num BETWEEN 5 AND 15 ;

-- 返回第5-15 行数据

解析函数能用格式

函数() over(pertion by 字段 order by 字段);

Pertion 按照某个字段分区

Order 按照勒个字段排序

posted @ 2014-04-28 10:13  南风知我意吖  阅读(195)  评论(0编辑  收藏  举报