南大通用GBase8s 常用SQL语句(230)

对组合 SELECT 的限制
对于您通过 UNION、INTERSECT、MINUS 或 EXCEPT 集合运算符进行连接的查询,会受到以下限制:
每条查询的 Projection 子句中的项数必须相同,且每条 Projection 子句中的相应项必须有兼容的数据类型。
每条查询的 Projection 子句不能指定 BYTE 或 TEXT 对象(此限制不适用于 UNION ALL 操作。)
如果使用 ORDER BY 子句,它必须紧跟在最后一条 Projection 子句之后,而且必须引用整数 select_number 排序(而不是按 SQL 标识符排序)的项。设置操作完成后,就开始排序。
可以在临时表中存储任何集合运算符的组合结果,但 INTO TEMP 子句只能出现在最后一条 SELECT 语句中。
在 GBase 8s ESQL/C 中,除非返回的行只有一行,而且您没有使用游标,否则不能将 INTO 子句用于复合查询。在这种情况下,INTO 子句必须在第一条SELECT 语句中。
UNION 子查询是在子查询中包括 UNION 运算符的查询。在定义视图的 CREATE VIEW 语句中,不能指定UNION 子查询。
在组合查询中,本版 GBase 8s 支持在分布式查询中引用 UNION 子查询。即,可以在本地服务器的不同实例间,或跨服务器的实例间包含 UNION 子查询。
下列限制影响所有组合的查询,包括 UNION 和 UNION ALL 子查询,以及包括 INTERSECT、MINUS 或 EXCEPT 集合运算符的查询:
UNION 子查询不能是触发器事件。如果有效 UNION 子查询指定已在其中定义 Select 触发器,那么该查询成功,但是忽略该触发器(或视图上的 INSTEAD OF 触发器)。
在包含 UNION 子查询或任何其他集合运算符的查询中,在 ALL、ANY、IN、NOT IN 和 SOME 运算符的左边,包括主变量的通用的表达式是无效的。但是只由单个主变量组成的表达式在此上下文中有效。
例如,在上述限制之下,下列查询是有效的:
SELECT col1 FROM tab1 WHERE ? <= ALL
(SELECT col2 FROM tab2 UNION SELECT col3 FROM tab3);
在此示例中,ALL 左边的表达式是单个主变量( ? ),这是包含 UNION 子查询的查询中 ALL、ANY、IN、NOT IN 或 SOME 运算符之前受支持的唯一涉及主变量的表达式。
相反,下列示例显示了无效查询:
SELECT col1 FROM tab1 WHERE (? + 8) <= ALL
(SELECT col2 FROM tab2 UNION SELECT col3 FROM tab3);
该查询失败是因为在 ALL 运算符左边的 <= 关系运算符的操作数是(? + 8)(包含主变量的算术表达式)。这在 UNION 子查询中是无效语法,在通过任何其他集合运算符组合查询中也无效。
不包含主变量的表达式不遵守此限制。因此,下列(包括相同的 UNION 子查询的)查询有效:
SELECT col1 FROM tab1 WHERE (col1 + 8) <= ALL
(SELECT col2 FROM tab2 UNION SELECT col3 FROM tab3);
UNION 运算符
将 UNION 运算符放在两条 SELECT 语句之间来将查询组合到单个查询内。
可以使用 UNION 运算符将几个 SELECT 语句串在一起。相应的项无需具有相同的名称。可通过省略 ALL 关键字来排除重复的行。
在本版本GBase 8s 中,在包含 UNION 运算符的查询中支持数值型字段和数值字符串的组合查询。其返回结果的为 DECIMAL(16) 或 DECIMAL(32) (取决于返回的数值的长度)数据类型。例如:
SELECT 123 FROM tab1 UNION SELECT ‘456’ FROM tab2;
下一示例假定 tab1 表中 colid 列为 INT 类型:
SELECT col1id FROM tab1 UNION SELECT ‘111’ FROM tab2;
使用 UNION 时还可以直接将 NULL 值与其它类型的列值进行组合查询,而无需强制转换 NULL 的数据类型。其返回结果的类型与 NULL 值对应的其它类型值的数据类型一致。
例如,在以下示例中假定 tab2 表中 colid 的类型为 VARCHAR:
SELECT NULL as a1 FROM tab1
UNION SELECT colname FROM tab2
INTO tab3;
数据库会自动将上面示例中 NULL 的类型转换为 colname 列的数据类型 VARCHAR。查看 tab3 表的信息:
info columns for tab3;
返回如下:
Column name Type Nulls
A1 varchar(10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值