- 类别:
LIMIT / FETCH¶
约束语句或子查询返回的最大行数。LIMIT (Postgres 语法)和 FETCH (ANSI 语法)都受支持,并产生相同的结果。
- 另请参阅:
语法¶
-- Postgres syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
LIMIT <count> [ OFFSET <start> ]
[ ... ]
-- ANSI syntax
SELECT ...
FROM ...
[ ORDER BY ... ]
[ OFFSET <start> ] [ { ROW | ROWS } ] FETCH [ { FIRST | NEXT } ] <count> [ { ROW | ROWS } ] [ ONLY ]
[ ... ]
使用说明¶
ORDER BY 子句不是必需的;但是,如果没有 ORDER BY 子句,结果是不确定的,因为结果集中的结果不一定按任何特定顺序排列。要控制返回的结果,请使用 ORDER BY 子句。
count
和start
必须是非负整数常量。count
指定返回的行数。也接受值 NULL、空字符串 (
''
) 和$$$$
并将其视为“无限制”;如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。OFFSET start
可以选择指定行数,在此之后返回受限/提取的行。如果OFFSET
省略,则输出从结果集中的第一行开始。也接受值 NULL、空字符串 (
''
) 和$$$$
并将其视为 0(即不跳过任何行);如果连接器和驱动程序(如 JDBC 驱动程序)在将参数动态绑定到语句时收到不完整的参数列表,这主要对它们有用。
ONLY
此可选关键字不会影响输出。它只是为了强调给人类读者。TOP <n>
和LIMIT <count>
等效。
示例¶
以下示例演示了 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 | +---+