3种SQL语句分页写法

在开发中经常会使用到数据分页查询,一般的分页可以直接用SQL语句分页,当然也可以把分页写在存储过程里,下面是三种比较常用的SQL语句分页方法,下面以每页5条数据,查询第3页为例子:

第一种:使用not in,select top 方法:

select top 5 * from T_user where ID not in(select top (3-1)*5 id from T_user order by ID)

说明:select top 页大小 [要查询的字段名称] from 表名 where ID not in(select top (当前页数-1)*页大小 id from 表名 order by ID)

  第二种:使用select top ,max方法:

select top 5 * from T_user where(ID>=(select MAX(id)from(select top (3-1)*5+1 ID from T_user order by ID)as t))order by ID说明:select top 页大小 [要查询的字段名称] from 表名 where(ID>=(select Max(id)from(select top(当前页数-1)*页大小+1) ID from 表名 order by ID)as t)order by ID)

   第三种:如果SQLServer是2005及以上版本,可以使用ROW_NUMBER()函数进行分页:

select * from
(
select *, row_number()over(order by id) as num from T_user
)as t where t.num between (3-1)*5+1 and 3*5说明:select * from(select [要查询的字段名称], row_number()over(order by id) as num from 表名 )as t where t.num between (当前页-1)*页大小+1 and 当前页*页大小

  以上三种方法,从效率上讲方法一相对来说比较慢,二和三相差不大。。

时间: 2024-11-18 06:22:26

3种SQL语句分页写法的相关文章

几种SQL语句的写法

1.一张表中有用户信息表user(user_id,nickname),另外一张表联系人表contact(user_id,friend_id).现在要找出联系人的信息 SELECT U1.nickname as myselft,U2.nickname as friend FROM contact C inner join user U1 on C.user_id=U1.user_id inner join user U2 on C.friend_id=U2.id 以上如果friend_id可能为空

LAMP下的PHP执行sql语句的写法

LAMP下的PHP执行sql语句的写法: 代码如下: @mysql_connect("localhost", "root","1981427") //选择数据库之前需要先连接数据库服务器 or die("数据库服务器连接失败"); @mysql_select_db("test") //选择数据库mydb or die("数据库不存在或不可用"); $query = @mysql_quer

sql语句分页多种方式ROW_NUMBER()OVER

摘自: http://www.cnblogs.com/CodingArt/articles/1692468.html 方式一 select top @pageSize * from company where id not in (select top @pageSize*(@pageIndex-1) id from company) 方式二ROW_NUMBER()OVER --ROW_NUMBER() 就是生成一个有顺序的行号,而他生成顺序的标准,就是后面紧跟的OVER(ORDER BY ID

必须掌握的30种SQL语句优化

1.’对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from

30种SQL语句优化

01 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 02 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 03 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id fr

mysql的几种SQL语句

一.数据查询语言(DQL) DQL全称 DATA Query Language,作用是从表中获取数据,用的最多的关键字是SELECT,保留字有WHERE ,ORDER BY ,GROUP BY等 1.select user,host from mysql.user; select user,host from mysql.user order by user asc:用户名升序 select user,host from mysql.user order by user desc:用户名倒序 二

sql语句的写法

条件一.条件二条件一满足则条件二就不要加了.条件一不满足则按照条件二查询 where 条件1 or (not 条件1 and 条件2) 假设条件一: a.id=b.id 条件二: a.NAME=b.NAME WHERE Decode(a.id,b.id,1,Decode(a.NAME,b.NAME,1))=1

SQL Server 分页语句

表中主键必须为标识列,[ID] int IDENTITY (1,1) 1.分页方案一:(利用Not In和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable WHERE (ID NOT IN (SELECT TOP (页大小*(页数-1)) id FROM 表 ORDER BY id)) ORDER BY ID 2.分页方案二:(利用ID大于多少和SELECT TOP分页) SELECT TOP 页大小 * FROM TestTable WHERE (ID

sql 语句按字段指定值排序及分页

为特定字段赋值并排序 表[Table_temp]中列[col1]为字符,属性为varchar(10),排序时需要按照B.A.C的顺序显示,则可按照以下SQL语句: select * from Table_temp order by case when col1='B' then 1 when col1='A' then 2 when col1='C' then 3 end sql语句分页(OFFSET(@Page - 1) * @PageSize ROWS FETCH NEXT @PageSiz