inner join 與 left join 和right join之間的區別
要對這個理解之前,我們先對相關連線來做一個回憶。
首先做試驗的兩張表資料如下:student表和對應的grade成績表
1:inner join ,inner join可以理解為“ 有效的連線”,就是根據on後面的關聯條件,兩張表中都有的資料才會顯示 ,下面舉個例子
SELECT * FROM student stu INNER JOIN grade gra on stu.id = gra.c_stuId
查詢結果如下:
可以看到,id=3的這條資料並沒有查出來,這是因為在grade裡面,c_stuId並沒有等於3的這條資料。根據上面也可以看出,其實 INNER JOIN可以直接用where來替代。
2:left join:理解為“主全顯,後看on”(主表資料不受影響),即主表全顯示,連線後的表看on後面的選擇條件,left join後面的條件,並不會影響左表的資料顯示,左表資料會全部顯示出來,連線的表如果沒有資料,則全部顯示為null,看下面例子:
SELECT * FROM student stu LEFT JOIN grade gra on stu.id = gra.c_stuId
結果如下:
可以看出,左表student資料全部都顯示出來,而連線的表,注意看紅色部分,因為沒有資料,則全部顯示為null。這也和剛剛說的想符合,連線的主表student資料不受影響,全顯示,連線後的表資料看on後面的條件。
3:right join right join理解為“主看on,後全顯”(右表資料不受影響),即右表資料全部顯示,主表資料看on後面的選擇條件,看下面例子:
1 SELECT 2* 3 FROM 4student stu 5RIGHT JOIN grade gra on stu.id = gra.c_stuId
可以看出。right join對右邊連線的grade表資料沒有影響,全部顯示出來,而對左表的資料則是根據篩選後的條件來顯示,其餘的顯示為null;
綜上,可以對他們之間的使用有較基礎的理解。