要對這個理解之前,我們先對相關連接來做一個回憶。
首先做試驗的兩張表數據如下: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 4 student stu 5 RIGHT JOIN grade gra on stu.id = gra.c_stuId
可以看出。right join對右邊連接的grade表數據沒有影響,全部顯示出來,而對左表的數據則是根據篩選后的條件來顯示,其余的顯示為null;
綜上,可以對他們之間的使用有較基礎的理解。