我想獲取所有訂購粉紅色的客戶
客戶表
cid name
1001 Anna
1002 Boi
1003 Canny
1004 Dore
訂單表
cid color
1001 pink
1002 yellow
1005 green
1003 pink
我嘗試使用如下左連接
select t1.cid,t1.name,t2.color
from Customers t1
left join Orders t2
on t1.cid=t2.cid
where t2.color='pink'
我嘗試使用內連接
select t1.cid,t1.name,t2.color
from Customers t1
inner join Orders t2
on t1.cid=t2.cid
where t2.color='pink'
使用內連接或左連接,我得到與上述查詢相同的結果。我了解這兩個連接是如何作業的。內連接將只從兩個表中獲取匹配的記錄并應用 where 過濾器。左連接將從左表中獲取所有記錄,然后應用 where 過濾器。但是我很困惑在上面的這種情況下使用哪一種。
有很多這樣的場景,即使我知道如何獲得所需的結果,我也會對使用哪個連接感到困惑。我對 SQL 有點陌生,是否有任何機構可以幫助我?
uj5u.com熱心網友回復:
當您在要加入的表上應用過濾器(where 子句條件)時,就會發生這種情況。在這種情況下,“訂單”表。
這是因為您的 where 子句顯式過濾了 Order 表中顏色為粉紅色的行。然后它只會加入 Customer 表中匹配的 Order 行。
您會看到,當您洗掉 where 子句時,左連接將按您的預期運行。:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331616.html
上一篇:PostgreSQL中的型別轉換
