- 类别:
LIMIT / FETCH¶
约束语句或子查询返回的最大行数。LIMIT(PostgreSQL 语法)和 FETCH(ANSI 语法)均受支持,并产生相同的结果。
- 另请参阅:
语法¶
PostgreSQL 语法¶
SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]
ANSI 语法¶
SELECT ...
FROM ...
[ ORDER BY ... ]
[ OFFSET <start> ] [ { ROW | ROWS } ] FETCH [ { FIRST | NEXT } ] <count> [ { ROW | ROWS } ] [ ONLY ]
[ ... ]
参数¶
count
返回的行数。必须是非负整数常量。
也接受值 NULL、空字符串 (
''
) 和$$$$
并将其视为“无限制”;如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。OFFSET
start
在此之后返回受限/提取的行的行编号。必须是非负整数常量。
如果
OFFSET
省略,则输出从结果集中的第一行开始。也接受值 NULL、空字符串 (
''
) 和$$$$
并将其视为 0(即不跳过任何行);如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。ONLY
此可选关键字不会影响输出。它只是用于向人类读者强调。
使用说明¶
ORDER BY 子句并非必需;但如果没有 ORDER BY 子句,结果是不确定的,因为查询结果不一定按任何特定顺序排列。要控制返回的结果,请使用 ORDER BY 子句。
Top-K 修剪可以提高同时包含 LIMIT 和 ORDER BY 子句的查询的性能。有关更多信息,请参阅 用于提高查询性能的 Top-K 修剪。
TOP
n
和 LIMITcount
是等效的。LIMIT 子句和 SAMPLE 子句都会返回表中行的子集。使用 LIMIT 子句时,Snowflake 会以尽可能最快的方式返回指定行数。使用 SAMPLE 子句时,Snowflake 会根据子句中指定的采样方法返回行。
示例¶
以下示例演示了 LIMIT 的效果。为了简单起见,这些查询省略了 ORDER BY
子句,并假设输出顺序始终与第一个查询所示的顺序相同。** 实际查询应该包含 ORDER BY。**
select c1 from testtable; +------+ | C1 | |------| | 1 | | 2 | | 3 | | 20 | | 19 | | 18 | | 1 | | 2 | | 3 | | 4 | | NULL | | 30 | | NULL | +------+ select c1 from testtable limit 3 offset 3; +----+ | C1 | |----| | 20 | | 19 | | 18 | +----+ select c1 from testtable order by c1; +------+ | C1 | |------| | 1 | | 1 | | 2 | | 2 | | 3 | | 3 | | 4 | | 18 | | 19 | | 20 | | 30 | | NULL | | NULL | +------+ select c1 from testtable order by c1 limit 3 offset 3; +----+ | ID | |----| | 2 | | 3 | | 3 | +----+
下面的示例演示如何使用 NULLs 来指示
行数没有限制。
从第 1 行开始(不要跳过任何行)
CREATE TABLE demo1 (i INTEGER); INSERT INTO demo1 (i) VALUES (1), (2);
SELECT * FROM demo1 ORDER BY i LIMIT NULL OFFSET NULL; +---+ | I | |---| | 1 | | 2 | +---+
SELECT * FROM demo1 ORDER BY i LIMIT '' OFFSET ''; +---+ | I | |---| | 1 | | 2 | +---+
SELECT * FROM demo1 ORDER BY i LIMIT $$$$ OFFSET $$$$; +---+ | I | |---| | 1 | | 2 | +---+