sql分页

下面比较mysql与sql server的分页查询

Mysql:

var:http://www.2cto.com/database/201203/124349.html

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,
mysql已经为我们提供了这样一个功能。 

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset 
 
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须 
是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回 
记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句 
法: LIMIT # OFFSET #。 
 
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 
 
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1: 
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. 
 
//如果只给定一个参数,它表示返回最大的记录行数目: 
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 
 
//换句话说,LIMIT n 等价于 LIMIT 0,n。

Sql server:

var:http://database.51cto.com/art/201009/224178.htm

下文将为您介绍sql server数据库中的分页SQL语句,该语句一次查询,数据库只返回一页的数据。

SqlServer分页SQL语句特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。
说明:
pagesize: 每页显示记录数
cureentpage:当前页数

select * from (   select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage   * from user_table   ORDER BY id ASC ) as aSysTable   ORDER BY id DESC ) as bSysTable   ORDER BY id ASC

例子说明:
假如数据库表如下:
user_table:
id:主键,自增
username:字符
password:字符

假设有80条记录,每页显示10条记录,id 从1到80
现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。

这时该语句应该为:
select * from (   select TOP 10 * FROM ( SELECT TOP 30   * from user_table   ORDER BY id ASC ) as aSysTable   ORDER BY id DESC ) as bSysTable   ORDER BY id ASC

原理如下:
(1)先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30   * from user_table   ORDER BY id ASC)
(2)然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1  
(3)然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。
(4)最后在重新排序得到最终我们需要的数据。id在21-30之间。

posted @ 2013-12-20 20:59  GYI_Feison  阅读(118)  评论(0)    收藏  举报