📅  最后修改于: 2023-12-03 15:28:22.248000             🧑  作者: Mango
在 MS SQL 中,选择限制语句主要包括以下三种:TOP
、OFFSET-FETCH
和 ROW_NUMBER()
。
TOP
语句用于返回前 N 行数据。例如:
SELECT TOP 5 * FROM mytable;
上述语句将返回 mytable
表中的前五行数据。
注意,TOP
语句只能用于 SELECT
语句中,不能用于 INSERT
、UPDATE
或 DELETE
语句中。
OFFSET-FETCH
语句用于分页查询,其语法如下:
SELECT column1, column2, ...
FROM table
ORDER BY orderby_expression
OFFSET offset_rows { ROW | ROWS }
FETCH { FIRST | NEXT } fetch_rows { ROW | ROWS } ONLY;
其中,OFFSET
子句指定要跳过的行数,FETCH
子句指定要返回的行数。例如:
SELECT column1, column2, ...
FROM mytable
ORDER BY id
OFFSET 10 ROWS
FETCH NEXT 20 ROWS ONLY;
上述语句将返回 mytable
表中 id 大于 10 的前 20 行数据。
注意,OFFSET-FETCH
语句只能用于 MS SQL 2012 及以上版本。
ROW_NUMBER()
用于为查询结果中的每一行分配一个唯一的编号,常用于分页查询和删除重复行。其语法如下:
SELECT ROW_NUMBER() OVER (ORDER BY column1, column2, ...) AS rownum, column1, column2, ...
FROM mytable;
上述语句将为 mytable
表中的每一行分配一个唯一的编号,并按照 column1
和 column2
进行排序。
可以使用 ROW_NUMBER()
结合 WHERE
子句实现分页查询。例如:
SELECT *
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY id) AS rownum, *
FROM mytable
) AS subquery
WHERE rownum BETWEEN 10 AND 20;
上述语句将返回 mytable
表中 id 大于 10 小于等于 20 的行数据。
注意,ROW_NUMBER()
语句只能用于 MS SQL 2005 及以上版本。