使用重复表名称的原因是为了创建星形连接。在星形连接中,一个表或视图与若干其它表或视图相连接。
在 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 连接。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |