左連接:left join
如A left join B 即取出A表的所有數據,由on條件關聯的B表數據,有則顯示,沒有則為空;
右連接:right join
如 A right join B 即取出B表的所有數據,由on條件關聯的A表數據,有則顯示,沒有則為空;
所以:A left join B 與 B right join A 是一樣的效果
內連接:inner join
A inner join B 表示A,B中同時都有的數據才取出來;
下面是做的一個例子哈:
表group_col:
表student_col:
下面這個圖是用右連接給顯示出來的:
select stu.*,gr.* from student_col stu
right join group_col gr on stu.college_id=gr.id
下面這個圖是用左連接給顯示出來的:
select stu.*,gr.* from student_col stu
left join group_col gr on stu.college_id=gr.id
內連接就不說了哈:都有數據才顯示出來,你懂得撒;
下面介紹一特殊的例子:(沒弄懂上面的,不要看下面這種哈,免得給弄暈了)
student_col表中的外鍵對應於group_col的主鍵:
select stu.*,gr.* from student_col stu
right join group_col gr on stu.college_id=gr.id and gr.id=1
前面right join 會查出所有的group_col里面的數據,
后面的on相當於條件語句,stu.college_id=gr.id 與gr.id=1需要求交集而得到的結果
當前面得到group_col里面的數據后,把gr.id與student_col中的所有college_id對比,有多少相等就把與student_col中的college_id相等的student_col數據給讀出來,
后面又有個and gr.id=1條件,所以這里對gr.id與student_col中的所有college_id對比的時候,gr.id只能為1.因為and是求交集的;
顯示如圖:
select stu.*,gr.* from student_col stu
right join group_col gr on stu.college_id=gr.id where gr.id=1
下面這種與上面不同的是,where是在前面已經讀出一些數據后,經過where條件來篩選。