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 的用法 » 查询和修改数据 » 连接:从多个表检索数据 » 内连接和外连接 » 外连接

 

外连接和连接条件

使用外连接时通常会出现连接条件放置错误。在大多数情况下,如果您在 WHERE 子句中对提供空值的表施加限制,则连接等效于内连接。

原因在于:在搜索条件的任何输入都为 NULL 时,大多数搜索条件无法计算为 TRUE(真)。对提供空值的表的 WHERE 子句限制将限制值与 NULL 进行比较,导致从结果集中删除相应的行。保留的表中的行不再保留,因此连接是内连接。

例外的是有些比较在输入都为 NULL 时的值为真。这些包括 IS NULL、IS UNKNOWN、IS FALSE、IS NOT TRUE 和涉及 ISNULL 或 COALESCE 的表达式。

示例

例如,以下语句计算左外连接。

SELECT *
FROM Customers KEY LEFT OUTER JOIN SalesOrders
   ON SalesOrders.OrderDate < '2000-01-03';

相比之下,以下语句创建内连接。

SELECT Surname, OrderDate
FROM Customers KEY LEFT OUTER JOIN SalesOrders
   WHERE SalesOrders.OrderDate < '2000-01-03';

这两个语句中的第一个语句可按如下说明来理解:首先,将 Customers 表左外连接到 SalesOrders 表。结果集中包括 Customers 表的所有行。对于在 2000 年 1 月 3 日之前没有任何订单的那些客户,用空值填充销售订单字段。

在第二条语句中,首先左外连接 Customers 和 SalesOrders。结果集中包括 Customers 表的所有行。对于没有任何订单的那些客户,用空值填充销售订单字段。接下来,通过只选择在其中客户自 2000 年 1 月 3 日以后已下了订单的那些行,应用 WHERE 条件。对于没有下任何订单的那些客户,这些值是空值。将任何值与空值进行比较将计算为 UNKNOWN(未知)。因此,这些行被删除,该语句简化为内连接。

有关搜索条件的详细信息,请参见搜索条件