SELECT: LIMIT

说明

限制结果集的范围

语法

select_limit ::=

参数

count

表示至多返回count行。

ALL

返回offset之后的所有行。

offset

表示在开始返回第一行之前要忽略的行数。

注解

LIMIT子句用于对返回结果的范围进行限制,一个完整的LIMIT子句形如LIMIT count OFFSET offset,其含义为返回查询结果中从offset行开始之后的count个行(或count为关键字ALL,则返回之后的所有行)。OFFSET offset部分是可选的,若不指定,则返回结果集中的前count行。

LIMIT子句通常与ORDER BY子句联用,因为不使用ORDER BY子句,SQL是不保证结果的顺序的。若不使用ORDER BY子句对结果进行排序,在不同的时刻运行同一查询,你有可能会发现结果的顺序变了。

参数count、offset可以是普通非负数常量,也可以是带括号的合法的复杂表达式,表达式结果值必须为非负数。如果count、offset的值为负数,或者它们的表达式结果值为负数,神通数据库会提示相应的错误信息。

LIMIT、OFFSET子句不能够与TOP、TOP PERCENT子句同时使用,唯一特例是不带PERCENT的TOP子句可以和OFFSET一起使用,此时其含义为返回查询结果中从offset行开始之后的前top行数据。

示例

示例1: 限定返回结果集行数

--  清理环境
DROP TABLE tab1 CASCADE;


--  创建表并插入数据
CREATE TABLE tab1 (a INT, b INT, c INT);

INSERT INTO tab1 VALUES(1, 10, 900);
INSERT INTO tab1 VALUES(2, 20, 500);
INSERT INTO tab1 VALUES(2, NULL, 200);
INSERT INTO tab1 VALUES(3, 30, 1000);


SELECT * FROM tab1 ORDER BY a, b, c;
A(int)      |B(int)      |C(int)      |
------------------------------------
1           |10          |900         |
------------------------------------
2           |20          |500         |
------------------------------------
2           |null        |200         |
------------------------------------
3           |30          |1000        |
总数目:4



--  借助 LIMIT 取得最大值
SELECT a FROM tab1 ORDER BY a DESC LIMIT 1;
A(int)      |
------------
3           |
总数目:1



--  借助 LIMIT 、 OFFSET 取得第二大值
SELECT a FROM tab1 ORDER BY a DESC LIMIT 1 OFFSET 1;
A(int)      |
------------
2           |
总数目:1


--  删除表
DROP TABLE tab1;