GBase 8s 扩展 OUTER 子句
OUTER 关键字扩展外连接,语法为隐式的左外连接。如果您对于外连接使用此 GBase 8s 扩展语法,则对同一 SELECT 语句使用所有下列限制:
- 您必须对单个查询块中的所有外连接使用 GBase 8s 扩展语法。
- 您必须在 WHERE 子句中包括连接条件。
- 您不可以 LEFT JOIN 或 LEFT OUTER JOIN 关键字起始另一外连接。
- 您不可定义横向的表引用或包括 LATERAL 关键字。
- 在 GBase 8s 扩展外连接之内,“表引用”语法段不可包括在同一 SELECT 语句中声明的横向的表引用。
(+) 操作符
使用(+)形式表现外连接,即用 (+) 来表示两表的连接关系。可以在 WHERE 条件中使用 “(+)” 形式的外连接语法来实现多表连接。例如,tb_A.c1=tb_B.c2 (+) 表示 tb_A LEFT OUTER JOIN tb_B ON tb_A.c1 = tb_B.c2。
使用 ”(+)” 操作符表示外连接具有以下限制:
- = 两边不能同时设置(+)。
- 多个连接条件之间必须使用 AND 关键字连接,不支持其它关键字。
- (+) 操作符只适用于列,不能用于表达式,并且不能与 OR 或 IN 运算符一起使用。
- 不能使用 (+) 操作符连接同一个表,可以通过采用不同别名方式进行自连接。
- 如果在一个单独的查询块中使用了 (+) 操作符,则所有的外连接都必须使用 (+) 操作符的形式。
- 单次查询中任意两张表不能既左外连接后右连外接。
- 如果使用了 (+) 操作符的外连接形式,则在一个查询块中的其它外连接中不能使用 LEFT JOIN 或者 LEFT OUTER JOIN 形式。
举例
示例语句标准表 lefttb 嵌套外连接,先与标准表 righttb 左外连接,再嵌套左外连接标准表 rightsubtb ,返回匹配条件为真的行、左表中不符合匹配条件的行:
---ANSI嵌套连接语法
SELECT t1.*,t2.*,t3.* FROM lefttb t1
LEFT OUTER JOIN righttb t2
ON t1.rid = t2.rid
LEFT OUTER JOIN rightsubtb t3
ON t2.rid = t3.rid;
---隐式左外连接 OUTER 扩展语法
SELECT t1.*,t2.*,t3.*
FROM lefttb t1 ,OUTER(righttb t2,OUTER rightsubtb t3)
WHERE t1.rid = t2.rid AND t2.rid = t3.rid;
---(+) 操作符表示嵌套左外连接
SELECT t1.*,t2.*,t3.*
FROM lefttb t1 ,righttb t2,rightsubtb t3
WHERE t1.rid=t2.rid(+) AND t2.rid=t3.rid(+);