GBase 8s 扩展外连接

对于外连接的 GBase 8s 扩展语法始于隐式的左外连接。即,您以 OUTER 关键字开始 GBase 8s 扩展外连接。

这是 GBase 8s 扩展 OUTER 子句的语法。
GBase 8s OUTER 子句
下列示例使用 OUTER 关键字来创建罗列所有客户及其订单的外连接,不论他们是否已下订单:
SELECT c.customer_num, c.lname, o.order_num FROM customer c, 
        OUTER orders o WHERE c.customer_num = o.customer_num;

此带有在 orders 表中相匹配的行从 customer 表返回所有行。如果在 orders 表中没有客户的记录出现,则对那些有 NULL 值的客户返回的 order_num 列。

如果您有复合的外连接,即,该查询有多个外连接,则您必须或者嵌入附加的外连接或者在圆括号中连接,如语法图所示,或在 WHERE 子句中的主表与每一从表之间创建连接条件或关系。

当 WHERE 子句中的表达式或条件关系到两个从表时,您必须在 FROM 子句中使用圆括号将连接的表括起来,以强调主-从关系,如此例中所示:
SELECT c.company, o.order_date, i.total_price, m.manu_name
        FROM customer c, 
        OUTER (orders o, OUTER (items i, OUTER manufact m))
        WHERE c.customer_num = o.customer_num
        AND o.order_num = i.order_num 
        AND i.manu_code = m.manu_code;

当您在 FROM 子句中省略括起从表的圆括号时,您必须在 WHERE 子句中的主表与每一从表之间建立连接条件。如果连接条件在两个从表之间,则查询失败。

然而,下列示例成功地返回结果
SELECT c.company, o.order_date, c2.call_descr
        FROM customer c, OUTER orders o, OUTER cust_calls c2
        WHERE c.customer_num = o.customer_num
        AND c.customer_num = c2.customer_num;

GBase 8s SQL 教程指南 有复合的外连接的示例。

GBase 8s 扩展外连接的限制

如果您对于外连接使用此 GBase 8s 扩展语法,则对同一 SELECT 语句使用所有下列限制:
  • 您必须对单个查询块中的所有外连接使用 GBase 8s 扩展语法。
  • 您必须在 WHERE 子句中包括连接条件。
  • 您不可以 LEFT JOIN 或 LEFT OUTER JOIN 关键字起始另一外连接。
  • 您不可定义横向的表引用或包括 LATERAL 关键字。
  • GBase 8s 扩展外连接之内,“表引用”语法段不可包括在同一 SELECT 语句中声明的横向的表引用。
1 请参阅 FROM 子句
2 GBase 8s 扩展