《SQLServer》------常用的分页查询语句

前言

    在SqlServer中,分页查询是经常用到的查询语句,一个好的分页查询语句,不能能将代码省          略,还能提高运行效率,下面我们来探讨一下SQLServer中的分页查询语句。

    具体的业务逻辑是这样的,我数据库中有100条数据,我要查第40-50数据,表中有两个字段,      一个字段是id,一个字段是name,其中id是不连续的,因为我删除id为44、45的记录,因为我        要查数据的第40-50条记录,也就是id分别为41、42、43、46、47、…52的十条记录。那该怎        么办呐?下面就是一些具体的例子。

方法一

    先搜出id在1-40之间的数据,紧接着搜出id不在1-40之间的数据,最后将搜出的结果取前十条。

    SELECT TOP 10           --3、最后再取出前10条数据,这就是数据库中第41-50条数据(注意,      id不是41-50,因为我删除了id为44、45的记录)
        *
    FROM    dbo.a
    WHERE   id NOT IN (     --2、然后搜出id不在前40之内的其它数据
    SELECT TOP 40   --1、按照id排序之后先搜出前40条数据
         id 
    FROM    dbo.a
    ORDER BY id )
    ORDER BY id;

方法二

    先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0,然后查询id值大于前40条记录的最大id值的记录。这个查询有一个条件,就是id必须是int类型的。效果图同上。

方法三、 使用Row_Number

    把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录。

        SELECT TOP 10
              *
        FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY id ) AS rownumber ,
                    *
        FROM      a
        ) A
        WHERE   rownumber > 40;

方法四 OFFSET x ROW FETCH NEXT y ROWS ONLY;

    使用OFFSET是SQLServer2012新具有的分页功能,主要功能是从第x条数据开始共取y数据。但是其必须根再Order By
    后面使用,相比前三种方式更加方便。例如

select id from a Order by id Offset 0 Row Fetch Next 5 Rows Only.

    这种方法支持SQLServer2012,但是SQLServer2008不支持,这种方法就像lamda表达式的Skip().Take()原理差不多;另外,MySQL的Limit函数也是这么用的。

小结

    自我感觉第四种方式非常的爽,而且是爽到家了,因为没有嵌套查询啊,少了Sql语句的嵌套,就少了“视觉上的逻辑”,但是大家一定要切记,这种方式只是适合SqlServer2012以及更高的版本,由于小编就吃过这亏。由上面的例子可以看出,SqlServer的确挺强大的,但是如果我们缺少发现“功能” 的眼睛的话,Sql Server再强大对我们来说也没有。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值