如何在SQL中查询第N条到第M条数据

如何在SQL中查询第N条到第M条数据,第1张

with cte as

(

select RowNumber=row_number() over(order by id),* from 表名

)

select * from cte where RowNumber between 10 and 20

这是查10到20行的

第M条到第N条?呵呵,顺序显示你是排好的,但M<N吧?不管是谁大小,你极可能是使用在分页程序中,又不想对数据库进行全读,对吧?但在ASP中这样做意义不大。

比如你是以一个列名为id的进行升序排序的话可以考虑使用以下方式:

读取第M条到第N条(M 〈N)

select top (m-n+1) * from tablename where id in (select top n id from table [where 条件‘如果没有条件可省略]order by id DESC) order by id ASC

这个是利用子查询进行一种方式。一般先取出前N条,然后在前N条中取出后M条,但我们没有办法取出后M条,但还好有办法取出前M条,其实这之间的差别就是顺序巅倒一下就可得到相应的数据了!

但一个子查询与主查询都是挺橇时的。一般用于分页查询中。

比如对一个数据库进行一次分页查询,若是使用常规的分页查询肯定是:

先进行一次查询,然后计算其具体的页数,根据页数的不同,比如页是2时,对于结果进行一次rs.move page*pagesize,到达相应的页数后再进行依次取值,这样做的缺陷是每次都是一个完整的数据库,如果分页过多(也就是数据量大时)很橇时。所以我们在想是不是从数据库取出时构造特定的SQL语句只取出本页的内容?比如我想取出第二页的记录,SQL语句进行这样的构造:

子查询取出前2页的内容,然后再在子查询中取出后一页的内容,也就是第二页的内容。基于这种想法去构造SQL,比如想取出第21条到第40条的内容,当然是每页显示20条计录时,可以考虑使用这种方式。

但说到最后一页,先取出的也是所以的,然后取出到(前一页码)*页容量+1到结尾的数据,虽说子查询有一次也是对全局数据记录或是几乎全局记录的索引,但这些都是交由数据服务器进行的。而不用再交给ASP进行处理。从而节省了分页的时间。所以一般情况只是对其进行一个子查询的嵌套就可以完成任务了!


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

原文地址: http://outofmemory.cn/sjk/9891346.html

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

发表评论

登录后才能评论

评论列表(0条)

保存