联接语法
Vertica 支持用于联接表的 ANSI SQL-92 标准,如下所示:
table‑reference [join-type] JOIN table-reference [ ON join-predicate ]
其中,join-type 可以是以下类型之一:
例如:
=> SELECT * FROM T1 INNER JOIN T2 ON T1.id = T2.id;
注意
对于 NATURAL 和 CROSS 联接,ON join-predicate
子句无效,而对于所有其他联接类型,该子句是必需的。
替代语法选项
Vertica 还支持两种较旧的联接语法约定:
由 WHERE 子句联接谓词指定的联接
INNER JOIN 等效于在 WHERE 子句中指定其联接谓词的查询。例如,此示例和上一个示例返回相同的结果。它们都分别在 T1.id
和 T2.id
列上指定 T1
和 T2
表之间的内部联接。
=> SELECT * FROM T1, T2 WHERE T1.id = T2.id;
JOIN USING 子句
可以使用 JOIN USING 子句在同名列上联接两个表。例如:
=> SELECT * FROM T1 JOIN T2 USING(id);
默认情况下,由 JOIN USING 指定的联接始终是内联接。
注意
JOIN USING 通过将两个联接列合并为一个来联接两个表。因此,无论联接列中的实际数据如何,这两个联接列的数据类型必须相同或兼容,例如 FLOAT 和 INTEGER。SQL-92 联接语法的好处
Vertica 建议您使用 SQL-92 联接语法,原因如下:
-
SQL-92 外联接语法可跨数据库移植;旧语法不能在数据库之间保持一致。
-
SQL-92 语法可更好地控制是在外联接期间还是之后评估谓词。如果使用旧语法,这同样无法在数据库之间保持一致。
-
SQL-92 语法消除了在通过外联接联接两个以上的表这种情况下,联接评估顺序的不确定性。