MySQL Join操作淺析



一、Join操作的類型&條件

類型:內連接(inner join),外連接(left outer join, right outer join, full outer join)
條件:natural(自然連接)

二、準備

準備三章表:stu_baseinfo表示學生基本信息,stu_course表示學生選課信息,stu_tutor表示學生導師信息
可以通過下面的連接就行下載無須積分,然後啓動mysql,輸入source file就可以了(sql文件的路徑要正確)
stu_baseino表數據如下

stu_course表數據如下


stu_tutor表數據如下

三、各種Join操作分析(所有實驗均在mysql5.6進行)

3.1 join ,inner join, cross join在MySQL中三者意義一樣,就是簡單的做笛卡爾積
PS:令我不解的是select  * from stu_baseinfo abcd join stu_course  on stu_baseinfo.id=stu_course.id; 
無論在join前面加什麼字符串即使是abcd,不知道這是一個bug還是有意的。


3.2 left outer join:左外連接    
A left outer join B on condition 就是將滿足條件的行選出來同時將A中不滿足條件的行自然落下,沒有的屬性用NULL補
其中outer可以省略不寫在MySQL中

3.3 right outer join
右外連接 A right outer join B on condition = B left outer join A on condition 

MySQL不支持全外連接,可以先做左外連接再做右外連接然後將二者做union操作模擬全外連接



3.4 using 與 natural自然連接


using的用法與on類似都是連接的條件,using後面的屬性必須是join表共有的屬性
PS:一定不要忘記using後面的屬性要寫括號

不知道細心的你有沒有發現用using與自然連接的id只顯示一列,而上面使用on的左外與右外連接以及內連接id都重複顯示,這就是他們之間的區別。


3.5 ‘,’逗號操作符與join
mysql中逗號操作符於join是一致的,但是逗號操作符的優先級要低於join。
即:t1 ,t2 join t3 的執行順序是t2 join t3 然後結果跟t1 join 。
下面用mysql的explain簡答分析一下二者的關係



從上面結果中可以看出,join操作的on等同於where子句,逗號操作符與join一樣。
從結果中還可以看出在mysql執行查詢的過程中使用了join buffer優化技術採用的是block nested loop算法。



發佈了20 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章