使用重复表名称的原因是为了创建星形连接。在星形连接中,一个表或视图与若干其它表或视图相连接。
在 FROM 子句中多次使用同一个表名称、视图名称或相关名,即可创建星形连接。这是对 ANSI/ISO SQL 标准的扩展。使用重复名并不添加任何附加功能,但这可以使某些查询写起来更加容易。
为使语法有意义,重复名必须位于不同的连接中。如果在同一连接中使用两次表名称或视图名称,则忽略第二个实例。例如,FROM A,A
和 FROM 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 连接。
只有 extended_join_syntax 选项为 On(缺省值)时,才能使用重复表名称。
-
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |