2010-04-23 16 views
5

我經常在採訪中被問到「SQL中的外連接是什麼」?什麼是使用SQL的OUTER JOIN的一些很好的例子?

雖然它可以回答,但我不知道什麼可能是一些經典和良好的現實生活中使用(左)外聯接的例子?

+0

http://stackoverflow.com/questions/1101343/what-is-the-purpose-or-use-case-for-an-outer-join-in-sql的可能重複 – 2010-04-23 12:13:20

回答

6

在對客戶和訂單表Northwind數據庫。

進行內部聯接只會爲您提供下訂單的客戶。

做外部加入將得到全部客戶和訂單已下訂單的客戶。

3

A 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 
3

經典的例子是流派和命令。有些客戶有訂單,其他客戶則沒有訂單。您想要顯示總銷售額的客戶清單。所以你做一個從客戶到訂單的左外連接,並得到:

客戶A:100美元; 客戶B:$ 0; 顧客C:$ 500

代替:

客戶A:$ 100; 客戶C:500美元

1

獲取所有客戶的列表,包括他們所做訂單的任何細節。有些客戶可能沒有下訂單,因此INNER JOIN會將他們排除在此列表之外。

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

下面是一個例子:

我需要所有的客戶名單,與他們的憑證,我還需要一個從未使用過優惠券的顧客。

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

要添加到羅賓日的答案,您還可以使用左外部聯接來抓取沒有下訂單的客戶,方法是檢查NULL。


SELECT * 
FROM Customer 
    LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId 
WHERE Order.CustomerId IS NULL 
相關問題