sql server 求和后如何分页请看SQL语句

sql server 求和后如何分页请看SQL语句,第1张

四种方式实现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 procedure 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

一般的分页查询使用简单得很LIMIT子句即可实现

SELECT FROM 表名 LIMIT [offset,] rows

如果偏移量一定,返回记录数对对执行时间有什么影响?

记录数在100以内是,差异不明显,超过100以后会随着记录数增加而增加。

如果查询记录数一定,偏移量的变化会对性能有什么影响?

LIMIT 1000,100

LIMIT 100000,100

偏移量在100以内,差异不明显,超过100以后随着偏移量的增加所需时间会快速上升

无论是否使用LIMIT,偏移量参数。。。内部都是从第一条开始进行扫描,然后丢弃掉前面部分的数据

不使用SELECT ,而是查询具体字段,这样可以省去回表的时间

SELECT FROM STUDENT WHERE ID >=10000 LIMIT 100

但是这样存在一个问题,第一万条数据的ID经过多次维护很可能已经不是10000了

SELECT FROM STUDENT WHERE ID >= (SELECT ID FROM STUDENT LIMIT 1000,1) LIMIT 100

在子查询中,即使用了覆盖索引,又尽可能减小了数据行数。

除了使用子查询,也可以在查询之后保留当前页的最大值,这样读取下一页时可以直接使用,但是这只限于下一页的情况。

对于深度分页,例如一共有10000页,突然从第5页跳转到最后一页,或者指定跳转到8888页。

limit是mysql的语法

select from table limit m,n

其中m是指记录开始的index,从0开始,表示第一条记录

n是指从第m+1条开始,取n条。

select from tablename limit 15,15

即取出第16条至第30条,15条记录

格式:select from 表 limit index,n 其中index是第几条,n显示多少条;

select from 表 limit 0,20 其实就做到分页显示了,意思是从第1条开始取20条,点下一页你修改select from 表 limit 19,20这就是第二页了,也显示20条

limit 第一个参数是查询的 开始位置,第二个是查询的行数,跟数值大小没关系,如果你的查询慢,因该检查 表是否有索引,而且 like 查询 在大数据中很影响性能,一般like语句会造成全表扫描

选择astudentname,azhengpic,bgetbookdate的BookInfo为B,BOOKTYPE的作为,aid = bstudentid bid = cid作为一个从studentinfo,

以上就是关于sql server 求和后如何分页请看SQL语句全部的内容,包括:sql server 求和后如何分页请看SQL语句、关于分页查询(MarkDown格式)、Mysql中limit的用法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10179750.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存