SQL Server基础:TOP、OFFSET-FETCH、SET ROWCOUNT用法笔记

数据库 SQL Server
今天给大家介绍一下TOP、OFFSET-FETCH、SET ROWCOUNT用法笔记,希望对大家能有所帮助!

[[390591]]

今天给大家介绍一下TOP、OFFSET-FETCH、SET ROWCOUNT用法笔记,希望对大家能有所帮助!

1、 TOP用法

语法格式:TOP ( expression ) [ PERCENT ] [ WITH TIES ]

  • expression:返回行数的数值表达式
  • PERCENT:指返回的结果集行的百分比。

用法:

  1. --从UserInfo数据表提取20行记录 
  2. SELECT TOP 20 * FROM UserInfo; 
  3. --UserInfo数据表提取10%行记录 
  4. SELECT TOP 10 PERCENT * FROM UserInfo; 

表达式中指定返回的行数或百分比,则必须将表达式包含在括号内。用法如下:

  1. DECLARE @n AS int
  2. SET @n = 12 
  3. SELECT TOP (@n) * 
  4. FROM UserInfo ; 

注意:在未指定ORDER BY子句的情况下,TOP子句返回的数据行,是那些在物理循序上优先访问到的行,而并不一定是逻辑上的前几行。简单来说,这种返回结果具有不确定性。即使指定了ORDER BY子句,但是所指定的排序列中含有重复值,返回的结果也具有不确定性。不确定的数据,对于数据使用而言,没有多少价值。解决列中存在重复值时返回结果的不确定性问题,可以使用WITH TIES 关键字。该关键字将指定返回包含ORDER BY子句返回的最后一个值的所有行,这样将超过expression指定的数量。示例:

  1. SELECT TOP 2 WITH TIES  
  2. FROM UserInfo 
  3. ORDER BY CreateDate 

2、OFFSET-FETCH用法

SQL Server 2012版本引入了对OFFSET-FETCH技术的支持。OFFSET-FETCH筛选通常被视为ORDER BY子句的一部分,通常用于实现按顺序分页显示效果。OFFSET指定要跳过的行数,FETCH指定在跳过的行数后要筛选的行数用法:

  1. SELECT UserID, Birthday, Name,Age 
  2. FROM UserInfo 
  3. ORDER UserID 
  4. OFFSET 20 ROWS FETCH NEXT 15 ROWS ONLY

注意:使用OFFSET-FETCH的查询必须具有ORDER BY子句。此外,FETCH子句也必须有OFFSET子句。如果不想跳过任何行,但是希望使用FETCH筛选,可以使用OFFSET 0 ROWS来表示。不过,单独使用FETCH表示跳过指定的行数,并返回查询结果中所有剩余行。OFFSET-FETCH语法有一些有趣的语言方面需要注意。单数格式ROW和复数格式ROWS是可以互换的,因此能够以直观的类似英语方式来描述筛选。例如,假设仅希望获取一行,如果指定了FETCH 1 ROWS,虽然这在语法上是有效的,不过看上去会很怪。因此,可以使用FETCH 1 ROW格式。此互换同样适用于OFFSET子句。另外,如果不希望跳过任何行(OFFSET 0 ROWS),可能觉得“first”比“next”更合适,因此,FIRST和NEXT格式是可以互换的。从支持跳过功能看,OFFSET-FETCH子句比TOP子句更灵活。但OFFSET-FETCH不支持PERCENT和WITH TIES选项,而TOP支持。由于OFFSET-FETCH是标准的,而TOP不是,建议使用OFFSET-FETCH作为默认选择,除非你需要TOP支持且OFFSET-FETCH不支持的功能。

3、SET ROWCOUNT语句

SET ROWCOUNT n 语句限制结果集的大小,该语句指定在返回指定的n行后停止处理查询。SET ROWCOUNT与TOP的差别如下:

  • SET ROWCOUNT限制适用于计算ORDER BY后在结果集中生成行。如果指定了ORDER BY,SELECT语句将从分类排序后的某个值集中选择n行后结束。
  • TOP和OFFSET-FETCH适用于单个SELECT语句。直到执行下一个SET ROWCOUNT语句前,SET ROWCOUNT设置将一直有效。如果执行SET ROWCOUNT 0将关闭该选项。

说明:TOP和OFFSET-FETCH性能要优于使用SET ROWCOUNT,应当尽量避免使用SET ROWCOUNT。用法:

  1. SET ROWCOUNT 4; 
  2. SELECT TOP 20 * 
  3. FROM UserInfo; 

 

责任编辑:姜华 来源: IT技术分享社区
相关推荐

2021-04-18 07:58:22

SQL Server数据库Apply

2010-11-10 15:23:55

SQL SERVER

2010-09-13 13:19:16

Sql Server分

2013-05-02 15:09:22

2011-08-19 10:24:46

SQL Server Top新用途

2010-11-12 10:53:41

sql server表

2010-11-11 11:13:54

SQL Server

2009-05-11 09:19:35

微软SQL Server Codesmith

2021-10-13 06:49:13

SQL Server优化

2011-04-06 14:03:47

MySQLSQL Server用法

2010-11-10 14:06:44

SQL Server全

2010-07-09 14:51:21

SQL Server

2010-06-28 11:06:04

SQL Server

2022-08-31 07:24:56

Docker日志命令

2011-01-13 08:47:49

SQL Server数

2011-03-28 12:50:45

SQL Server CE基础

2010-07-13 16:48:14

SQL Server

2010-07-26 16:39:57

SQL Server

2010-08-25 13:54:29

CSStop

2021-04-21 07:17:16

SQLServer数据库SQL
点赞
收藏

51CTO技术栈公众号