使用SQL OUTER JOIN的一些好例子是什么?

时间:2010-04-23 12:08:01

标签: sql join left-join outer-join

我经常在采访中被问到“什么是SQL中的外部联接”?

虽然可以回答,但我想知道使用(LEFT)OUTER JOIN的一些经典和好的现实生活例子会是什么?

7 个答案:

答案 0 :(得分:6)

在Customers and Orders表的Northwind数据库中。

执行内部联接只会为您提供已下订单的客户。

执行外部联接将为已下订单的客户提供所有客户和订单。

答案 1 :(得分:6)

要添加到Robin Day的答案,您还可以使用左外部联接来仅通过检查NULL来抓取未下订单的客户。


SELECT *
FROM  Customer
  LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId
WHERE Order.CustomerId IS NULL

答案 2 :(得分:5)

以下是左外连接的可视化表示

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

alt text

在下面的文章中阅读有关联接的更多信息 http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx(最好的文章之一必读)

答案 3 :(得分:3)

当您需要来自一个表的所有记录以及来自另一个表的记录(如果有)时,可以使用LEFT OUTER JOIN

,如表UserAddress,其中Address的FK为User,每个用户可能有0个或更多地址:

select *
from User u
left outer join Address a on u.UserID = a.UserID

这将确保您获得所有User条记录,无论是否有相应的Address记录。

如果要显示所有没有地址的用户,可以执行以下操作:

select *
from User u
left outer join Address a on u.UserID = a.UserID
where a.UserID is null

答案 4 :(得分:3)

经典的例子是cutomers和order。有些客户有订单,有些则没有。您希望显示总销售额的客户列表。因此,您从客户到订单执行左外连接并获取:

客户A:100美元; 客户B:0美元; 客户C:500美元

而不是:

客户A:100美元; 客户C:500美元

答案 5 :(得分:2)

以下是一个例子:

我需要所有客户的清单,凭借他们的凭证,我还需要从未使用过优惠券的客户。

SELECT *
FROM Customer
LEFT OUTER JOIN Voucher
 ON Customer.CustomerId = Voucher.CustomerId

答案 6 :(得分:1)

获取所有客户的列表,包括他们所做订单的任何详细信息。有些客户可能没有下订单,因此INNER JOIN会将其排除在此列表之外。

SELECT
    *
FROM
    Customer
LEFT OUTER JOIN
    Order
ON
    Customer.CustomerId = Order.CustomerId