Ⅰ sql Server 分页 查询语句
四种方式实现SQLServer 分页查询
SQLServer 的数据分页:
假设现在有这样的一张表:
CREATE TABLE test
(
id int primary key not null identity,
names varchar(20)
)
然后向里面插入大约1000条数据,进行分页测试
假设页数是10,现在要拿出第5页的内容,查询语句如下:
--10代表分页的大小
select top 10 *
from test
where id not in
(
--40是这么计算出来的:10*(5-1)
select top 40 id from test order by id
)
order by id
原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素
第二种方法:
还是以上面的结果为例,采用另外的一种方法
--数据的意思和上面提及的一样
select top 10 *
from test
where id >
(
select isnull(max(id),0)
from
(
select top 40 id from test order by id
) A
)
order by id
原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0
然后查询id值大于前40条记录的最大id值的记录。
这个查询有一个条件,就是id必须是int类型的。
第三种方法:
select top 10 *
from
(
select row_number() over(order by id) as rownumber,* from test
) A
where rownumber > 40
原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录
这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的
第四种:
存储过程查询
创建存储过程
alter procere pageDemo
@pageSize int,
@page int
AS
declare @temp int
set @temp=@pageSize*(@page - 1)
begin
select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id
end
执行存储过程
exec 10,5
Ⅱ sql分页语句查询问题
从t1结果集中取数据的时候没有排序,当然结果不会变
改成这样
select * from(select top 3 * from(select top 3 * from student order by 编号 desc) t1 order by 编号 desc) t2 order by 编号 asc
Ⅲ 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)
这样可以么?
Ⅳ 如何用sql语句 实现分页查询
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
Ⅳ 一条sql语句实现分页查询,且能返回记录总数
select *,(select count(*) from t1) from(
select top 2 * from(
select top 4 * from(
select * from t1
)as ttb0 order by id
)as ttb1 order by id desc
)as ttb2 order by id
在select后加个子查询就OK了,
Ⅵ 求SQL分页的语句
2个参数Start end
start 开始 end 结束
例如第二页从Start11条开始 结束end 21百
select * from (select rownum a,NEWS.* from NEWS where rownum<='"+end+"') b where b.a>'"+start+"'"
方法2 select * from NEWS limit a,b
a就是从第几条开始 b就是查询出的条数
例如 从第10条开始后的10条select * from NEWS limit 10,10
从第6条开始后的8条select * from NEWS limit 6,8
Ⅶ SQL分页查询,怎么一次性显示2页的查询结果
按照上面回答的,可以这样修改下:
SELECT 产品, SUM(CASE 季度 WHEN '第一季度' THEN 销售量 ELSE 0 END) AS 第一季度, SUM(CASE 季度 WHEN '第二季度' THEN 销售量 ELSE 0 END) AS 第二季度, SUM(CASE 季度 WHEN '第三季度' THEN 销售量 ELSE 0 END) AS 第三季度 FROM
(select *,ROW_NUMBER over(order by 产品) as rn from Tables )
where rn between @PageSize*(@PageIndex-1)+1 and @PageSize*@PageIndex
GROUP BY 产品 ORDER BY 产品,rn
@PageSize 每页几条数据
@PageIndex 页码
只需按照参数传递即可
Ⅷ sql分页查询语句 首页,上一页怎么实现
--假如每页显示条数据10条
--哪么第一页1~10 第二页11~20 即起始行数=10*(页数-1)+1,结束行=页数*10
declare@startint
declare@endint
set@start=8
set@end=18
select*from(
selectP_ID,P_ClassName,ROW_NUMBER()OVER(orderbyP_ID)asrowfrom
dbo.AD_Position)asa
whererowbetween@startand@end
--太酷了,这样一个分页就搞定了。还可以这样变化,可选参数只是[页的大小]
declare@pagesizeint
declare@startint
declare@endint
declare@pagecountint
set@pagecount=2
set@pagesize=10
set@start=(@pagesize*(@pagecount-1)+1)
set@end=@pagecount*@pagesize
select*from(
selectP_ID,P_ClassName,ROW_NUMBER()OVER(orderbyP_ID)asrowfrom
dbo.AD_Position)asa
whererowbetween@startand@end
这是前几年的一个博文摘录,希望对你用!
Ⅸ 关于分页查询的sql语句
这里的K不仅仅是个别名的作用,他把 (select *,row_number() over(order BY UserID) rowIndex from userinfo)做为一个表来查询 ,如果不加则作为一个查询结果集,SQL无法再查询结果集上在进行查询
Ⅹ Access数据库分页查询,效率sql语句
in的效率太低,不能利用索引,建议使用:
select top 每页数量 * from 表 where id >(select top 1 max(id) from (select top (页数-1)*每页数量 from 表 order by id,name)) 或
select top 每页数量 * from 表 where id <(此处根据顺序和逆序)