MySql的內連、左連、右連 用法及區別
1.內連:
如下,user表中有userid,username,userage,userthing欄位屬性,colleagues表裡有collid,collname,collsex,collposition欄位屬性,當兩張表內連線,只會查詢兩張表裡通過on條件都滿足的資料,即user表和colleagues表都有的資料。
查詢名字相同的那條資料,也就是說,user表裡和colleagues表名字都相同的那條資料,即要求必須同時滿足兩張表。
SELECT * FROM USER INNER JOIN colleagues ON user.username = colleagues.collname
先看兩張表裡原來的資料,user表的和colleagues表的資料分別如下圖:
在看通過上述的SQL內連查詢語句查出來的結果:
查詢出的結果是必須是條件滿足兩張表,即兩張表共有的資料。
2.左連:
左連本身就是以左表資料為主,查符合條件的資料,還是以user表和colleagues表為例,user表中原來的資料和colleagues表中原來的資料如下:
左連的語句如下:
SELECT * FROM USER LEFT JOIN colleagues ON user.username = colleagues.collname ;
查詢結果如下:
可以看出滿足名字相同的只有yaoshuting一條資料,但是user表中的資料都會顯示出來,即便在colleagues表中是沒有資料的。
當給左連再加上where條件判斷時,如下:
SELECT * FROM USER LEFT JOIN colleagues ON user.username = colleagues.collname WHERE colleagues.collname IS NOT NULL;
結果如下:只查出左連後,還滿足where條件的資料。
3.右連:
右連本身就是以右表資料為主,查符合條件的資料,還是以user表和colleagues表為例,user表中原來的資料和colleagues表中原來的資料上述有,這裡直接給右連的結果,如下:
SELECT * FROM USER RIGHT JOIN colleagues ON user.username = colleagues.collname;
能看出來本身colleagues表中就只有3條資料,在查出名字相同的滿足user表的資料,以colleagues表為主,也可以寫成colleagues left join user,這樣也是以colleagues表資料為主的,即user left join colleagues 等同於 colleagues right join user。
小結:
1.內連就是抓取兩張表共同滿足on條件後的資料。
2.左連就是以左表資料為主,再查出滿足on條件後的資料。
3.右連就是以右表資料為主,再查出滿足on條件後的資料。
4.A表左連B表等同於B表右連A表,A表右連B表等同於B表左連A表。