使用 TOP 选项
TOP 选项支持以下两种方式:
• TOP N :指定取得结果集中前 N 条记录。
• TOP M,N :指定取得结果集中第 M 条记录之后的 N 条记录。
您可检索前 N 个符合条件的行。例如,下列查询将找到薪酬最高的 10 名雇员:
SELECT TOP 10 name, salary FROM employee ORDER BY salary DESC;
下列查询将找到薪酬第二高的雇员:
SELECT TOP 1,1 name, salary FROM employee ORDER BY salary DESC;
使用 SKIP、FIRST、TOP、LIMIT 或 MIDDLE 作为列名称
如果没有整数紧跟在 FIRST 关键字之后,则数据库服务器将 FIRST 解释为列标识符。例如,如
果表 T 有列 first、second 和 third,则下列查询会从名为 first 的列返回数据:
SELECT first FROM T
同样的考虑也适用于 TOP、SKIP 和 LIMIT 关键字。如果 Projection 子句中的 LIMIT 关键字之
后没有字面整数也没有整数变量,则 GBase 8s 将 LIMIT 解释作为列名称。如果 FROM 子句中
的数据源不具有带有该名称的列,则查询失败并报错。
使用带有 FIRST 选项(或 TOP 选项)的 SKIP 选项
如果带有 SKIP offset 选项的 Projection 子句还包括 FIRST 、TOP 或 LIMIT,则结果集将以符
合条件的行集合中顺序位置为(offset + 1)的行开始,而不是以第一行开始。除非符合条件的行
少于(offset + max),否则位置(offset + max)上的行是结果集中的最后一行,。下列示例忽略
了表 tab1 的前 50 行,但返回最多 10 行的结果集,以第 51 行开始:
SELECT SKIP 50 FIRST 10 a, b FROM tab1;
下一示例在查询中使用 SKIP 和 FIRST 来将不多于 5 行从表 tab1 插入到表 tab2 内,以第 11
行开始:
INSERT INTO tab2 SELECT SKIP 10 FIRST 5 * FROM tab1;
也可以使用 TOP 关键字代替 FIRST 关键字,以下示例的效果等同于上一示例:
INSERT INTO tab2 SELECT SKIP 10 TOP 5 * FROM tab1;
下列集合子查询仅返回第 11 至第 15 之间的符合条件的行作为集合派生的表,通过列 a 中的值
排列这 5 行的顺序,并将此结果集存储在临时表中。
SELECT * FROM TABLE (MULTISET
(SELECT SKIP 10 FIRST 5 a FROM tab3
ORDER BY a)) INTO TEMP;
下列 INSERT 语句包含一个集合子查询,该集合子查询的结果将定义集合派生表。这些行按列 a
中的值排列顺序,并将插入到表 tab1 内。
INSERT INTO tab1 (a)
SELECT * FROM TABLE (MULTISET (SELECT SKIP 10 FIRST 5 a
FROM tab3 ORDER BY a));
将 FIRST 或 LIMIT 或 TOP 和 SKIP 选项与 ORDER 子句结合在一起的查询可对符合条件的行
强加唯一顺序,因此按 max 的值增大 offset 值的连续查询可将符合条件的行划分为 max 行的不
相连子集。这可支持需要固定页面大小的 web 应用程序,而无需游标管理。
仅当所有参与的数据库服务器都支持 SKIP 和 FIRST 选项(或 TOP 选项),您才可在分布式查
询中使用这些特性。