有哪些使用 SQL 的 OUTER JOIN 的好例子?
Posted
技术标签:
【中文标题】有哪些使用 SQL 的 OUTER JOIN 的好例子?【英文标题】:What are some good examples where SQL's OUTER JOIN is used? 【发布时间】:2011-02-11 12:02:28 【问题描述】:我经常在面试中被问到“什么是 SQL 中的外连接”?
虽然可以回答,但我想知道使用(LEFT)OUTER JOIN 的一些经典和好的现实生活示例是什么?
【问题讨论】:
***.com/questions/1101343/…的可能重复 【参考方案1】:在客户和订单表的罗斯文数据库中。
进行内部联接只会为您提供已下订单的客户。
执行外部联接将获得所有个客户和已下订单的客户的订单。
【讨论】:
【参考方案2】:要添加到 Robin Day 的答案,您还可以使用 Left Outer Join 通过检查 NULL 来仅抓取未下订单的客户。
SELECT *
FROM Customer
LEFT OUTER JOIN Order
ON Customer.CustomerId = Order.CustomerId
WHERE Order.CustomerId IS NULL
【讨论】:
【参考方案3】:以下是左外连接的视觉表现
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(必读的最佳文章之一)
【讨论】:
【参考方案4】:当您想要一个表中的所有记录以及另一个表中的记录(如果有)时,可以使用LEFT OUTER JOIN
。
例如,给定表 User
和 Address
,其中 Address
与 User
有一个 FK,每个用户可能有 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
【讨论】:
【参考方案5】:经典的例子是客户和订单。有些客户有订单,有些则没有。您想显示总销售额的客户列表。所以你做一个从客户到订单的左外连接并得到:
客户 A:100 美元; 客户 B:0 美元; 客户 C:500 美元
代替:
客户 A:100 美元; 客户 C:500 美元
【讨论】:
【参考方案6】:这是一个例子:
我需要所有客户的列表,连同他们的优惠券,我还需要从未使用过优惠券的客户。
SELECT *
FROM Customer
LEFT OUTER JOIN Voucher
ON Customer.CustomerId = Voucher.CustomerId
【讨论】:
【参考方案7】:获取所有客户的列表,包括他们所下订单的任何详细信息。有些客户可能没有下订单,因此 INNER JOIN 会将他们排除在此列表之外。
SELECT
*
FROM
Customer
LEFT OUTER JOIN
Order
ON
Customer.CustomerId = Order.CustomerId
【讨论】:
以上是关于有哪些使用 SQL 的 OUTER JOIN 的好例子?的主要内容,如果未能解决你的问题,请参考以下文章
SQL中inner join,outer join和cross join的区别
SQL中inner join,outer join和cross join的区别
SQL中的left outer join,inner join,right outer join用法详解