1. 程式人生 > >MySql的內連、左連、右連 用法及區別

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表。