7

我经常在面试中被问到“什么是 SQL 中的外连接”?

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

4

7 回答 7

7

在罗斯文数据库中的客户和订单表上。

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

进行外部联接将获得所有客户和已下订单的客户的订单。

于 2010-04-23T12:11:00.343 回答
6

要添加到 Robin Day 的答案,您还可以使用 Left Outer Join 通过检查 NULL 来仅获取未下订单的客户。


SELECT *
FROM  Customer
  LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId
WHERE Order.CustomerId IS NULL
于 2010-04-23T12:15:16.217 回答
5

以下是左外连接的视觉表示

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

替代文字

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

于 2010-04-23T12:17:03.333 回答
4

LEFT OUTER JOIN当您想要一个表中的所有记录以及另一个表中的记录(如果有)时,可以使用A。

例如,给定表Userand Address,其中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
于 2010-04-23T12:09:55.100 回答
3

经典的例子是客户和订单。有些客户有订单,有些客户没有。您想显示总销售额的客户列表。因此,您从客户到订单进行左外连接并获得:

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

代替:

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

于 2010-04-23T12:11:57.803 回答
2

这是一个例子:

我需要所有客户的列表,以及他们的优惠券,我还需要从未使用过优惠券的客户。

SELECT *
FROM Customer
LEFT OUTER JOIN Voucher
 ON Customer.CustomerId = Voucher.CustomerId
于 2010-04-23T12:12:17.670 回答
1

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

SELECT
    *
FROM
    Customer
LEFT OUTER JOIN
    Order
ON
    Customer.CustomerId = Order.CustomerId
于 2010-04-23T12:12:06.147 回答