SQL中 LEFT JOIN ,RIGHTJOIN,INNER JOIN 的使用及優先級淺析


 

首先了解JOIN的基本概念:

join 用於根據兩個或多個表中的列之間的關系,從這些表中查詢數據。

INNER JOIN:在表中存在至少一個匹配時,INNER JOIN 關鍵字返回行。

LEFT JOIN 關鍵字會從左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中沒有匹配的行。

RIGHT JOIN 關鍵字會右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中沒有匹配的行。

 

FULL JOIN 只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。

通俗的解釋是INNER JOIN就類似於查詢多個表並且在WHERE之后加上聯接這些表的唯一限定條件,以下兩句SQL語句,返回相同的結果:

select * from tb_Course as c,tb_CourseType as ct where c.ctpID=ct.ID

select * from tb_Course as c inner join tb_CourseType as ct on c.ctpID=ct.ID

以此類推,LEFT JOIN 返回左表的所有行,也就是即使右表中無法找到對應左表記錄的數據,也會返回數據。RIGHT JOIN 類似。而FULL JOIN就是LEFT 和 RIGHT 的並集,只要存在匹配就返回行。

而本文需要解決或者驗證的問題是在進行多表查詢的時候,LEFT JOIN ,RIGHT JOIN 會不會有優先級。

為了方便,就拿最簡單的三表查詢進行檢驗。在三表查詢中,可能出現的情況也就是9種(暫時不考慮FULL JOIN)。

首先運行下面語句:

select * from tb_Course as c inner join tb_CourseType as ct on c.ctpID=ct.ID

得到的結果如圖:

 

當在上面語句之后再JOIN一張表的時候:

select * from tb_Course as c inner join tb_CourseType as ct on c.ctpID=ct.ID
                                        inner join tb_Teacher as t on t.CID=c.ID

得到的結果如圖:

由此得到猜想,第二條語句首先進行了第一個JOIN,然后將此結果進行第二次JOIN,也就是是按照從左到右的順序進行JOIN。而為了驗證此猜想,就要進行其他的檢驗。方法很簡單,依次按照先LEFT JOIN 后LEFT JOIN或者先RIGHT JOIN后LEFT JOIN的順序進行檢驗,當檢查完每個結果集時,是否遵循先前的猜想。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM