如何从数据库中取出第n条记录?用一句sql语句实现

如何从数据库中取出第n条记录?用一句sql语句实现,第1张

假定你的表名为Table,你的标识列为Id

如果你的n是给定值,使用下列语句就可以:

rs.open

"select

top

1

*

from

(select

top

10

*

from

Table

order

by

Id

asc)

as

tmp

order

by

Id

desc",conn,3,3

如果你的n是变量,使用下列语句:

rs.open

"exec('select

top

1

*

from

(select

top

"

+

n

+

"

*

from

Table

order

by

Id

asc)

as

tmp

order

by

Id

desc'),conn,3,3

楼上的答案肯定不对,

因为

rownum

伪列是

sql

语句查询结果集的编号,

如果有数据被查出来那么

rownum

一定是从

1

开始的,

不可能从

3

开始,

所以select

*

from

table

where

rownum

between

n

and

n+3

永远返回零条记录。

正确的做法:

select

*

from

table

where

rownum

<=

n+3

minus

select

*

from

table

where

rownum

<3

第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进行处理。从而节省了分页的时间。所以一般情况只是对其进行一个子查询的嵌套就可以完成任务了!


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存