南大通用GBase 8s数据库对于连接的符合 ANSI 的语法支持这些连接规范:
要使用 CROSS 连接、LEFT OUTER、RIGHT OUTER 或 FULL OUTER 连接,或INNER(或简单的)连接,请参阅 ANSI INNER 连接。
要使用前连接过滤器,请参阅 使用 ON 子句。
要在 WEHERE 子句中使用一个或多个后连接过滤器,请参阅 定后连接过滤器。
要使得外连接的主或从部分成为另一连接的结果集,请参阅 使用连接作为外连接的主部分或从部分。
重要提示: 当您在 GBase 8s 中创建新的查询时,请对连接使用符合 ANSI 的语法.
在此,ONLY 关键字的语义与在 GBase 8s 扩展“表引用”段的语义相同,如在 ONLY 关键字中描述的那样。
当您为表引用声明别名(也称为关联名称)时,AS 关键字是可选的,如在 AS 关键字 中描述的那样,除非该别名与 SQL 关键字冲突。
ANSI 连接的表
对连接表使用符合 ISO/ANSI 的语法,您可指定 INNER JOIN、CROSS JOIN、NATURAL JOIN、LEFT JOIN(或 LEFT OUTER JOIN)、RIGHT JOIN(或 RIGHT OUTER JOIN)和 FULL JOIN(FULL OUTER JOIN)关键字。在符合 ANSI 的外连接中,OUTER 关键字是可选的。
这是对于指定的内连接和外连接的符合 ANSI 的语法。
ANSI 连接的表在同一查询块中,对于所有外连接您必须使用相同的连接语法形式(或 GBase 8s 扩展,或符合ANSI)。当您使用符合 ANSI 的连接语法时,您还必须在 ON 子句中指定连接条件。
如果“ANSI 连接的表”段紧跟在另一连接规范之后,则必须将它括在圆括号之间。 例如,下列两个查询的第一个返回错误;第二个查询是有效的:
SELECT * FROM (T1 LEFT JOIN T2) CROSS JOIN T3 ON (T1.c1 = T2.c5)
WHERE (T1.c1 < 100); -- Ambiguous order of operations;
SELECT * FROM (T1 LEFT JOIN T2 ON (T1.c1 = T2.c5)) CROSS JOIN T3
WHERE (T1.c1 < 100); -- Unambiguous order of operations;
下列有效的查询指定外部 SELECT 语句的 FROM 子句之内的表表达式的嵌套的 LEFT OUTER连接:
SELECT * FROM
( (SELECT C1,C2 FROM T3) AS VT3(V31,V32)
LEFT OUTER JOIN
( (SELECT C1,C2 FROM T1) AS VT1(VC1,VC2)
LEFT OUTER JOIN
(SELECT C1,C2 FROM T2) AS VT2(VC3,VC4)
ON VT1.VC1 = VT2.VC3)
ON VT3.V31 = VT2.VC3);
ANSI CROSS 连接
CROSS 关键字指定笛卡尔积,返回包括从每一被连接的表的一行的所有可能的成对组合。
ANSI INNER 连接
要使用符合 ANSI 的语法创建内(或简单的)连接,请以 JOIN 或 INNER JOIN 关键字指定该连接。如果您仅指定 JOIN 关键字,则数据库服务器缺省地创建隐式的内连接。内连接返回有一个或多个在其他一个表(或多个表)中的相匹配的行的表中的所有行。废弃不相匹配的行