求一SQL,取表中第几行到第几行的数据

方法一:

先取出前5005行数据,然后取出5005行,不在前5000行中的数据。

例如我有一张表tblMaterial(MatID, BH, MC, DW),其中MatID为主键,并且自动递增。
现在假设我要取第10行至15行的数据,我的做法如下:

select top 6 * 
from tblMaterial 
where MatID not in(
                   select top 9 MatID 
                   from tblMaterial
                  )

因为使用了"not in",所以当数据量大的时候,查询非常慢。
比如现在我想取第5000行到5005,此时的速度就比查询第10行到15行的速度慢多了。

方法二:

先将原来的表哥升序排列,取出前5005行;然后降序排序,取出前6行。

--第10到15行,共6条数据 
select top 6 * 
from   
        ( 
              select top 15 * 
              from tblMaterial 
              order by MatID 
        )   as   t 
order by MatID desc
 
 
--第5000到5005行,共6条数据 
select top 6 *
from 
    (
        select top 5005 *
        from tblMaterial
        order by MatID
    ) as t
order by MatID desc

第三种:

①方法是先进行升序排序,取出前30行;然后降序排序,取出前20行;然后取出所有。

②按照ID排序取值:按照升序排序,取出ID为前10的,然后取出前20(条件是ID大于前10中ID的最大值)

假设表中有唯一ID字段:
 
--第11条到第30条,共选出20条记录
select *
from (select top 20 * from (select top 30 * from 表名 order by ID) t1 order by ID desc) t2
order by ID
 
--或
 
--第11条到第30条,共选出20条记录
select top 20 *
from 表名
where ID>(select max(ID) from (select top 10 ID from 表名 order by ID) t1)
order by ID

第四种:使用between...and...

按照ID排序,然后添加行号rownumber,然后取出行号在5000和5005之间的。

with total as 
   (select *, row_number() over(order by Id) as rowNum from users)
   select * from total where rowNum between 5000 and 5015

 

  • 2
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

道法—自然

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值