📜  选择限制 ms sql (1)

📅  最后修改于: 2023-12-03 15:28:22.248000             🧑  作者: Mango

选择限制 MS SQL

在 MS SQL 中,选择限制语句主要包括以下三种:TOPOFFSET-FETCHROW_NUMBER()

TOP

TOP 语句用于返回前 N 行数据。例如:

SELECT TOP 5 * FROM mytable;

上述语句将返回 mytable 表中的前五行数据。

注意,TOP 语句只能用于 SELECT 语句中,不能用于 INSERTUPDATEDELETE 语句中。

OFFSET-FETCH

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()

ROW_NUMBER() 用于为查询结果中的每一行分配一个唯一的编号,常用于分页查询和删除重复行。其语法如下:

SELECT ROW_NUMBER() OVER (ORDER BY column1, column2, ...) AS rownum, column1, column2, ...
FROM mytable;

上述语句将为 mytable 表中的每一行分配一个唯一的编号,并按照 column1column2 进行排序。

可以使用 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 及以上版本。