首先了解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的順序進行檢驗,當檢查完每一個結果集時,是否遵循先前的猜測。