MySQL 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表數據如下
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算法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.