1. 程式人生 > >SQL語句中不同的連線JOIN

SQL語句中不同的連線JOIN

為了從兩個表中獲取資料,我們有時會用JOIN將兩個表連線起來。通常有以下幾種連線方式:

JOIN  or  INNER JOIN(內連線) : 這兩個是相同的,要求兩邊表同時有對應的資料,返回行,任何一邊缺失資料就不顯示。

LEFT JOIN(左外連線):即使右邊的表中沒有匹配,也從左表返回所有的行。

RIGHT JOIN(右外連線):即使左邊的表中沒有匹配,也從右表返回所有的行。

FULL JOIN(全外連線):只要其中一個表中存在匹配就返回行。

如例,有grade表(課程號sn,分數scroe,學號id),student表(學號id,學生姓名name),要查詢學生的姓名和成績

                                   

當JOIN或是INNER JOIN時,

SELECT s.name,g.sn,g.score from student as s join grade as g on s.id = g.id
或者
SELECT s.name,g.sn,g.score from student as s inner join grade as g on s.id = g.id

結果集如下

 

當LEFT JOIN時,

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id

結果集如下

當RIGHT JOIN時,

SELECT s.name,g.sn,g.score from student as s right join grade as g on s.id = g.id

結果集如下

當FULL JOIN時,

SELECT s.name,g.sn,g.score from student as s full join grade as g on s.id = g.id

結果集如下

注意,兩個表連線時用on,在使用left join(right join或full join)時,on與where的區別是:

on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄

where條件是在臨時表生成好後再對臨時表進行過濾的條件,這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。如下圖,

on條件為黃色部分

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id and score =90

SELECT s.name,g.sn,g.score from student as s left join grade as g on s.id = g.id where score =90