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

 

首先了解JOIN的基本概念:spa

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

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

LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。table

RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回全部的行,即便在左表 (table_name1) 中沒有匹配的行。class

 

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

通俗的解釋是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 的並集,只要存在匹配就返回行。im

而本文須要解決或者驗證的問題是在進行多表查詢的時候,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的順序進行檢驗,當檢查完每一個結果集時,是否遵循先前的猜測。

相關文章
相關標籤/搜索