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

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

 

自然连接

在您指定自然连接时,SQL Anywhere 基于名称相同的列生成连接条件。因此,要使用基表的自然连接,必须至少有一对具有相同名称的列,每个表一列。如果没有公用列名称,将发出错误消息。

如果表 A 和表 B 有一个共同的列名称,并且此列名为 x,则

SELECT *
FROM A NATURAL JOIN B;

等效于以下语句:

SELECT *
FROM A JOIN B
 ON A.x = B.x;

如果表 A 和表 B 有两个共同的列名称,并且它们分别名为 a 和 b,则 A NATURAL JOIN B 等效于以下语句:

A JOIN B
 ON A.a = B.a
 AND A.b = B.b;
示例 1

例如,您可以使用自然连接来连接 Employees 表和 Departments 表,因为这两个表有一个共同的列名称:DepartmentID 列。

SELECT GivenName, Surname, DepartmentName
FROM Employees NATURAL JOIN Departments
ORDER BY DepartmentName, Surname, GivenName;
GivenName Surname DepartmentName
Janet Bigelow Finance
Kristen Coe Finance
James Coleman Finance
Jo Ann Davidson Finance
... ... ...

以下语句是等效的。该语句显式指定在以上示例中生成的连接条件。

SELECT GivenName, Surname, DepartmentName
FROM Employees JOIN Departments
  ON (Employees.DepartmentID = Departments.DepartmentID)
ORDER BY DepartmentName, Surname, GivenName;
示例 2

在 Interactive SQL 中,执行以下查询:

SELECT Surname, DepartmentName
FROM Employees NATURAL JOIN Departments;
Surname DepartmentName
Whitney R & D
Cobb R & D
Breault R & D
Shishov R & D
Driscoll R & D
... ...

SQL Anywhere 查看这两个表,并确定这两个表仅有一个共同的列名称 DepartmentID。在内部将生成以下 ON 子句以用来执行该连接:

FROM Employees JOIN Departments
   ON Employees.DepartmentID = Departments.DepartmentID

NATURAL JOIN 正是输入 ON 子句的快捷方式;这两个查询是等同的。


使用 NATURAL JOIN 时出错
自然连接与 ON 子句一起使用
表的表达式的自然连接
视图和派生表的自然连接