SQLServer之常用的分页查询语句

数据库 专栏收录该内容
22 篇文章 0 订阅

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

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

1.使用Not In关键字
即:取不在前40条数据里的前10条

select top 10 * from table 
		where id not in 
		(select top 40 id from table order by id )
		order by id

2.使用Max(id)函数
即:从前40条数据中找到最大id,在找出id比之前最大id大的10条数据

select top 10 * from table 
		 where id >( select max(id) from (select top 40 id from table)temp)

3.使用Row_Number
需SQL Server 2005及以上版本
即:设置上rowid,然后去rowid大于40的前10条

select top 10 * 
		from (select Row_Number OVER(order by id asc) as rowid,* 
												from table)A
		 where rowid>40

4.Offset x row fetch next y rows only

  • 适用SQL Server 2012及以上版本*
    主要功能是从第x条数据开始共取y数据。但是其必须跟在Order By 后面使用,语法简便
select * from table order by id offset 0 row fetch next 5 rows only

注:

写得清晰点就是:

<!-- 分页 -->
<select id="selectByPage" resultMap="BaseResultMap"
    parameterType="java.util.Map">
    select
    <include refid="Base_Column_List" />
    from newslist order by id desc
    Offset #{startIdex} Row Fetch Next #{sizePage} Rows Only
</select>
1
2
3
4
5
6
7
8
startIndex,起始坐标 
sizePage,每一页多少条

这种方式只适合SqlServer2012以及更高的版本,这种方法与lamda表达式的Skip().Take()原理差不多;另外,MySQL的Limit函数也是这么用的。
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

安静的蛐蛐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值