使用SQL外部联接的一些好例子是什么?

使用SQL外部联接的一些好例子是什么?,sql,join,left-join,outer-join,Sql,Join,Left Join,Outer Join,在一次采访中,我经常被问到以下问题:什么是SQL中的外部连接 虽然可以回答这个问题,但我想知道在使用左外部联接的情况下,有哪些经典的和很好的实际示例?当您需要一个表中的所有记录以及另一个表中的记录(如果有的话)时,可以使用左外部联接 例如,给定的表用户和地址,其中地址有一个FK到用户,每个用户可以有0个或更多地址: select * from User u left outer join Address a on u.UserID = a.UserID 这将确保您获得所有用户记录,而不管是否有

在一次采访中,我经常被问到以下问题:什么是SQL中的外部连接

虽然可以回答这个问题,但我想知道在使用左外部联接的情况下,有哪些经典的和很好的实际示例?

当您需要一个表中的所有记录以及另一个表中的记录(如果有的话)时,可以使用左外部联接

例如,给定的表用户和地址,其中地址有一个FK到用户,每个用户可以有0个或更多地址:

select *
from User u
left outer join Address a on u.UserID = a.UserID
这将确保您获得所有用户记录,而不管是否有相应的地址记录

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

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

在客户和订单表上的Northwind数据库中

进行内部连接只会给您下订单的客户


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

经典示例是客户和订单。一些客户有订单,而其他客户没有。您希望显示包含总销售额的客户列表。因此,您从客户到订单进行左外连接,并获得:

顾客甲:$100 ;; 顾客乙:$0 ;; 顾客丙:500美元

而不是:

顾客甲:$100 ;;
客户C:$500

获取所有客户的列表,包括他们所下订单的任何详细信息。有些客户可能没有下订单,因此内部联接会将他们从该列表中排除

SELECT
    *
FROM
    Customer
LEFT OUTER JOIN
    Order
ON
    Customer.CustomerId = Order.CustomerId
以下是一个例子:

我需要一份所有客户的名单,以及他们的代金券,我还需要从未使用过代金券的客户

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

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


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

以下是左侧外部联接的视觉表示

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
在下面的文章中阅读更多关于连接的信息 最好的文章之一必须阅读

可能重复的