编写高级 SELECT 语句 / 集合运算 |
联合运算使用 UNION 运算符将两个查询组合成单个复合查询。可以在两个或多个 SELECT 语句之间使用 UNION 运算符来产生一个临时表,它包含存在于任何一个原始表或所有原始表中的行。还可以在视图的定义中使用 UNION 运算符。
SELECT * FROM (SELECT col1 FROM tab1 WHERE col1 = 100) AS vtab1(c1), (SELECT col1 FROM tab2 WHERE col1 = 10 UNION ALL SELECT col1 FROM tab1 WHERE col1 < 50 ) AS vtab2(vc1);
GBase 8s 不支持对 ROW 类型进行排序。由于 UNION 操作需要排序以除去重复值,所以当联合运算中的任一查询包括 ROW 类型数据时,不能使用 UNION 操作符。但是,数据库服务器确实支持具有 ROW 类型数据的 UNION ALL,这是因为此类运算无需排序。
图: 联合集合运算
UNION 关键字选择两个查询中的所有行,除去重复行并返回余下的行。因为查询的结果组合为一个结果,所以每个查询中的投影列表必须具有相同的列数。同时,从每个表选择的相应列必须包含兼容的数据类型(CHARACTER 数据类型列的长度必须相同),并且这些相应的列必须全部允许或全部不允许 NULL 值。
有关 SELECT 语句和 UNION 运算符的完整语法,请参阅 GBase 8s SQL 指南:语法。有关特定于 GBase 8s ESQL/C 产品和涉及 INTO 子句和复合查询的任何限制的信息,请参阅 GBase 8s ESQL/C 程序员手册。
图: 查询
SELECT DISTINCT stock_num, manu_code FROM stock WHERE unit_price < 25.00 UNION SELECT stock_num, manu_code FROM items WHERE quantity > 3;
图: 查询结果
stock_num manu_code 5 ANZ 5 NRG 5 SMT 9 ANZ 103 PRC 106 PRC 201 NKL 301 KAR 302 HRO 302 KAR