返回首页

gbase数据、南大通用产品文档:GBase8sFROM 子句中的子查询

更新日期:2024年09月11日

本节描述作为嵌套在外部 SELECT 语句的 FROM 子句中发生的子查询。
由于外部查询使
用子查询的结果作为数据源,因而此类子查询有时候称为派生表或表表达式。
下列查询在外部查询中使用星号表示法来返回检索 employee 表中 address 列所有字段的子
查询的结果。
图: 查询
SELECT * FROM (SELECT address.* FROM employee);
图: 查询结果
address ROW(102 Ruby, Belmont, CA, 49932, 1000)
address ROW(133 First, San Jose, CA, 85744, 4900)
address ROW(152 Topaz, Willits, CA, 69445, 1000))

这说明了如何指定派生表,但是它只是该语法的一个价值不高的示例,因为外部查询不操
作 FROM 子句中的子查询返回的表表达式中的任何值。(请参阅图 1获取返回相同结果
的简单查询。)

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 136 -
下列查询是一个更复杂的示例,其中外部查询仅选择派生表中满足条件的第一行,FROM
子句中的子查询将此派生表中满足条件的第一行,FROM 子句中的子查询将此派生表指定
为 customer 和 cust_calls 表的简单连接。
图: 查询
SELECT LIMIT 1 * FROM
(SELECT c.customer_num, c.lname, c.company,
c.phone, u.call_dtime, u.call_descr
FROM customer c, cust_calls u
WHERE c.customer_num = u.customer_num
ORDER BY u.call_dtime DESC);
该查询只返回客户已致电客户服务中心的那些行,如下所示。
图: 查询结果
customer_num 106
lname Watson
company Watson & Son
phone 415-389-8789
call_dtime 1998-06-12 08:20
call_descr Order was received, but two of the cans of
ANZ tennis balls within the case were empty
在前面的示例中,子查询包括 ORDER BY 子句,它指定出现在子查询的 Projection 列表
中的一列,但如果 Projection 列表省略了 u.call_dtime列,查询还是有效的。子查询仅可在
FROM 子句这个上下文中指定 ORDER BY 子句。

示例如下:
CREATE OR REPLACE PROCEDURE P_5_7 AS
TYPE nested_type IS TABLE OF VARCHAR2(15); -- 定义嵌套表类型
TYPE varray_type IS VARRAY(50) OF INTEGER;
TYPE associative_array_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
V1 nested_type:= nested_type();
V2 varray_type:= varray_type();
V3 associative_array_type; -- 不需要置初值
BEGIN
--再予以赋值
NULL;
END;
构造函数,示例如下:
CREATE OR REPLACE PROCEDURE P_5_8 AS
TYPE nested_type IS TABLE OF VARCHAR2(15); -- 定义嵌套表类型
TYPE varray_type IS VARRAY(50) OF INTEGER;
TYPE associative_array_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;

GBase 8s PL/SQL手册
南大通用数据技术股份有限公司
- 64 -

V1 nested_type:= nested_type(‘econ 2010’,‘acct 3410’,‘mgmt 3100’);
V2 varray_type:= varray_type(1,2,3,4,5,6,7);
V3 associative_array_type; -- 不需要置初值
BEGIN
--再予以赋值
NULL;
END;
构造函数带NULL,示例如下:
CREATE OR REPLACE PROCEDURE P_5_9 AS
TYPE nested_type IS TABLE OF VARCHAR2(15); -- 定义嵌套表类型
TYPE varray_type IS VARRAY(50) OF INTEGER;
TYPE associative_array_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
V1 nested_type:= nested_type(‘econ 2010’,NULL,‘mgmt 3100’);
V2 varray_type:= varray_type(1,2,3,NULL,5,6,7);
V3 associative_array_type; -- 不需要置初值
BEGIN
--再予以赋值
NULL;
END;

|
13 | one2
| NULL
|
NULL |
|
14 | three | 2013-07-22 | 161.218 |
|
30 | third | NULL
|
NULL |
|
33 | third | 2013-09-04 |