返回首页

gbase数据、南大通用产品文档:GBase8s使用 FIRST 子句选择特定行

更新日期:2024年09月11日

可以在 SELECT 语句的 Projection 子句中包含 FIRST max 规范(其中 max 具有整数值)
来构建查询,
使其仅返回匹配 SELECT 语句条件的最初max 行。

(且仅在)
此上下文中,
也可以使用关键字 LIMIT 作为 FIRST 的同义词。执行具有FIRST 子句的 SELECT 语句
时返回的行可能会不同,这取决于该语句是否还包含 ORDER BY 子句。

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 46 -

在 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 表中的前五行。
图: 查询
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

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 47 -

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

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

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司 - 48 -

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

CO Colorado
CT Connecticut
DE Delaware
FL Florida
GA Georgia
如果使用 SKIP 、FIRST 和 ORDER BY 关键字,必须指定对应于应用程序设计目标的参
数,如果 SKIP 的 offset 参数大于满足条件的行数,那么任何 FIRST 或 LIMIT 规范都无
效,并且查询不会返回任何结果。

配置onfig_kafka_[queueName].properties........................23

在所有平台上,GBase 8s 均可识别因特网协议 V6 (IPv6) 地址(长度为 128 位)和因特
网协议 V4 (IPv4) 地址(长度为 32 位)。
自 GBase 8s V8.8 和 Client SDK 2.90.xC4 开始,数据库服务器会在启动时检查底层操作
系统中是否支持 IPv6。如果支持 IPv6,那么将使用 IPv6。如果底层的操作系统不支持
IPv6,那么将使用 IPv4 地址。GBase 8s 和 Client SDK 从名称服务检索 IP 地址。
在同时带有 IPv4 和 IPv6 地址的主机上运行的 GBase 8s 可以按与在多宿主主机上运行
的服务器相同的方式进行处理。可使用以下某种方法在同时带有IPv4 和 IPv6 地址的主机
上配置 GBase 8s:
l 创建别名(使用 DBSERVERALIASES 配置参数),向其中某个别名指定 IPv6
地址而向另一个别名指定 IPv4 地址。
l 通过在 sqlhosts 文件中使用带通配符的主机名,指示 GBase 8s 在主机上配置的
所有 IP 地址上进行侦听。
例如:

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 55 -
#dbservername nettype hostname servicename options
olserver1 onsoctcp *myhost onservice1
如果已对主机配置了 IPv6 地址,那么 SQLHOSTS 文件中的 hostname 条目将映射到某
个 IPv6 地址。如果未对主机配置 IPv6 地址,那么 hostname 条目将映射到 IPv4 地
址。
禁用 IPv6 支持
GBase 8s 还提供了在 IPv4 环境中操作时禁用 IPv6 支持的方法。
要对所有数据库实例和客户机应用程序禁用 IPv6 支持,请执行以下操作:
l 创建空文件 $GBASEDBTDIR/etc/IFX_DISABLE_IPV6。
用户 gbasedbt 必须具有该文件的读许可权。该文件不可读写,也无需包含任何数据。
要对单个数据库实例或单个客户机应用程序禁用 IPv6 支持,请执行以下操作:
l 在数据库服务器实例上或在运行应用程序的工作站上,创建名为
IFX_DISABLE_IPV6 的环境变量,并将其值设置为 yes,如下所示:
IFX_DISABLE_IPV6=yes