sql中left join和right join混用
sql中leftjoin和rightjoin混?
left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄 inner join(等值連接) 只返回兩個表中聯結字段相等的?
如上所?,我們只做?下left join的實驗,right join和left join 類似
測試?共三張表,a b c
表結構和數據分別如下
a表
b表
c表
然后我們來試?下左連接 1, 我們來查詢a b兩張表,連接他們aid=bid的選項 sql>>SELECT * FROM a LEFT JOIN b on aid=bid
看圖很好理解,因為是a左連接b,所以b中為空的元素 ,在查詢結果中以NULL的形式補全 同理可得 sql>>SELECT * FROM a LEFT JOIN c on aid=cid
sql>>SELECT * FROM c LEFT JOIN b on bid=cid sql>>SELECT * FROM c LEFT JOIN b on cid=bid
也就是on后?的順序?所謂,?論是bid=cid還是cid=bid,重點是前?的left join還是right join
2,我們來試?下如果三張表左連接呢,會有什么情況? sql>>SELECT * FROM a
LEFT JOIN b on bid=aid LEFT JOIN c on aid=cid
sql>>SELECT * FROM a LEFT JOIN b on bid=aid LEFT JOIN c on bid=cid
3,如果我?了?個right join呢? sql>>SELECT * FROM a LEFT JOIN b on bid=aid RIGHT JOIN c on bid=cid
這?該怎么理解呢? 我們理解的時候可以把它拆成兩部分去理解 ?如第?部分 sql>>SELECT * FROM a LEFT JOIN b on bid=aid
然后再思考第?部分,假如上圖是?張表 我們叫它a_b 你可以新建?個視圖,就可以真成為?張虛表了 sql>>create VIEW a_b as (SELECT * FROM a LEFT JOIN b on bid=aid)
然后我們繼續做下??部分 sql>>select * from a_b right join c on bid=cid
可見,與上?的結果是?樣的,當然這是我們理解的過程,實際數據庫服務器執?的時候可能不是這樣的,它會做?些優化,提?效率
--------------------------------------------------------

浙公網安備 33010602011771號