Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询和修改数据 » 连接:从多个表检索数据 » 专用连接

 

连接中的重复相关名(星形连接)

使用重复表名称的原因是为了创建星形连接。在星形连接中,一个表或视图与若干其它表或视图相连接。

在 FROM 子句中多次使用同一个表名称、视图名称或相关名,即可创建星形连接。这是对 ANSI/ISO SQL 标准的扩展。使用重复名并不添加任何附加功能,但这可以使某些查询写起来更加容易。

为使语法有意义,重复名必须位于不同的连接中。如果在同一连接中使用两次表名称或视图名称,则忽略第二个实例。例如,FROM A,AFROM A CROSS JOIN A 均解释为 FROM A

在 SQL Anywhere 中,以下示例是有效的,其中 A、B 和 C 是表。在此示例中,表 A 的同一实例同时连接到 B 和 C。请注意,在星形连接中需要使用逗号分隔这些连接。在星形连接中使用逗号是星形连接语法所特有的。

SELECT *
FROM A LEFT OUTER JOIN B ON A.x = B.x,
     A LEFT OUTER JOIN C ON A.y = C.y;

下一个示例是等效的。

SELECT *
FROM A LEFT OUTER JOIN B ON A.x = B.x,
     C RIGHT OUTER JOIN A ON A.y = C.y;

这两个示例都等效于以下标准 ANSI/ISO 语法。(括号是可选的。)

SELECT *
FROM (A LEFT OUTER JOIN B ON A.x = B.x)
LEFT OUTER JOIN C ON A.y = C.y;

在下一个示例中,将表 A 连接到三个表:B、C 和 D。

SELECT *
FROM A JOIN B ON A.x = B.x,
     A JOIN C ON A.y = C.y,
     A JOIN D ON A.w = D.w;

这等效于以下标准 ANSI/ISO 语法。(括号是可选的。)

SELECT *
FROM ((A JOIN B ON A.x = B.x)
JOIN C ON A.y = C.y)
JOIN D ON A.w = D.w;

遇到复杂连接时,画图会很有帮助。上面的示例可通过下图描述,该图示阐释表 B、C 和 D 通过表 A 连接。

表 A 在中央,表 B、C 和 D 分别与其连接。
注意

只有 extended_join_syntax 选项为 On(缺省值)时,才能使用重复表名称。

有关详细信息,请参见extended_join_syntax 选项

 示例 1
 示例 2