可以在 SELECT 语句的 Projection 子句中包含 FIRST max 规范(其中 max 具有整数值) 来构建查询, 使其仅返回匹配 SELECT 语句条件的最初max 行。 在 (且仅在) 此上下文中, 也可以使用关键字 LIMIT 作为 FIRST 的同义词。执行具有FIRST 子句的 SELECT 语句 时返回的行可能会不同,这取决于该语句是否还包含 ORDER BY 子句。 在 Projection 子句中, 后面跟无符号整数的关键字 SKIP 可用在 FIRST 或 LIMIT 关键字 前面。 SKIP offset 子句指示数据库服务器在返回 FIRST 子句指定的行数之前, 从查询结果 集中排除最初 offset 行满足条件的行。在 SPL 例程中,SKIP 、FIRST 或 LIMIT 的参数 可以是字面值整数或局部 SPL 变量。如果 Projection 子句包含 SKIP offset 但不包含 FIRST 或 LIMIT 规范,那么查询返回除最初 offset 行以外所有满足条件的行。 Projection 子句在下列上下文中不能包含 SKIP 、FIRST 或 LIMIT 关键字: 当 SELECT 语句是视图定义的一部分 在子查询中,除了外部查询的 FROM 子句 在跨服务器分发的查询中,其中参与的数据库服务器不支持 SKIP 、FIRST 或 LIMIT 关键字。 有关使用 FIRST 子句的限制的信息,请参阅《GBase 8s SQL 指南:语法》中 SELECT 语 句的 Projection 子句的描述。
不具有 ORDER BY 子句的 FIRST 子句 如果具有 FIRST 子句的 SELECT 语句中没有 ORDER BY 子句,那么可能返回符合 SELECT 语句条件的任何行。换言之,数据库服务器确定返回哪些限定行,并且查询结果 可能会不同,这取决于优化器选择的查询计划。 以下查询使用 FIRST 子句来返回 state 表中的前五行。 图: 查询
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 48 - SELECT FIRST 5 * FROM state; 图: 查询结果 code sname
AK Alaska HI Hawaii CA California OR Oregon WA Washington 当只想知道表包含的所有列的名称和数据的类型,或者测试可能会返回许多行的查询时, 可以使用 FIRST 子句。以下查询显示了如何使用 FIRST 子句来返回表的第一行的列值。
图: 查询 SELECT FIRST 1 * FROM orders; 图: 查询结果 order_num 1001 order_date 05/20/1998 customer_num 104 ship_instruct express backlog n po_num B77836 ship_date 06/01/1998 ship_weight 20.40 ship_charge $10.00 paid_date 07/22/1998
具有 ORDER BY 子句的 FIRST 子句 可以在具有 FIRST 子句的 SELECT 语句中包括 ORDER BY 子句,以返回包含指定列的 最高值或最低值的行。以下查询显示了包含 ORDER BY 子句以(按字母顺序)返回包含 在 state 表中的前五个州的查询。该查询,(除 ORDER BY 子句以外,它与图 1相同)返 回不同于图 1的一组行。 图: 查询 SELECT FIRST 5 * FROM state ORDER BY sname; 图: 查询结果 code sname
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 49 - AL Alabama AK Alaska AZ Arizona AR Arkansas CA California 以下查询显示如何在具有 ORDER BY 子句的查询中使用 FIRST 子句来查找 stock 表中 列出的 10 中最贵的商品。 图: 查询 SELECT FIRST 10 description, unit_price FROM stock ORDER BY unit_price DESC; 图: 查询结果 description unit_price
football $960.00 volleyball $840.00 baseball gloves $800.00 18-spd, assmbld $685.90 irons/wedge $670.00 basketball $600.00 12-spd, assmbld $549.00 10-spd, assmbld $499.99 football $480.00 bicycle brakes $480.00 应用程序可以将 Projection 子句的 SKIP 和 FIRST 关键字与 ORDER BY 子句相结合使 用,以执行连续查询,对某些固定大小(例如,最大行数可在一屏显示,无需滚动)的子 集中所有满足条件的行进行增量检索。通过在每次查询后使用 FIRST 子句的 max 参数增 大 SKIP 子句的 offset 参数值可实现上述操作。通过对满足条件的行施加唯一的命令, ORDER BY 子句确保每次查询返回满足条件行的不同子集。 以下查询显示了包含 SKIP 、 FIRST 和 ORDER BY 规范以 (按字母顺序) 返回 state 表的 10 个州中的第六个州,而不是前五个州的查询。该查询类似于图 1,但 SKIP 5 规范指示 数据库服务器返回不同于图 1的行集。 图: 查询 SELECT SKIP 5 FIRST 5 * FROM state ORDER BY sname; 图: 查询结果 code sname
GBase 8s SQL 指南:教程 南大通用数据技术股份有限公司 - 50 -
CO Colorado CT Connecticut DE Delaware FL Florida GA Georgia 如果使用 SKIP 、FIRST 和 ORDER BY 关键字,必须指定对应于应用程序设计目标的参 数,如果 SKIP 的 offset 参数大于满足条件的行数,那么任何 FIRST 或 LIMIT 规范都无 效,并且查询不会返回任何结果。