sql數據庫表連接,主要分為:內連接、外連接(左連接、右連接 、全連接)、交叉連接,今天統一整合一下,看看他們的區別。
首先建表填充值。
學生表:student(id,姓名,年齡,性別 )
成績表:score(id,學生id,成績)
一、內連接(inner join……on)
select student.* ,Score.* from student inner join Score on student.id=Score.sid
查詢結果如下:
關系如下圖:
總結:inner join取兩表的交集。
二、外連接
外連接包括 左連接、右連接、全連接 (left|right | full outer join ……on),其中outer可以省略
(1)左連接(left join ……on)
select student.* ,Score.* from student left join Score on student.id=Score.sid
查詢結果如下:
關系如下圖:
總結:left join 以左表為准,查詢出左表的所有數據,右表中有對應的則顯示出來,沒有對應的則顯示為null.
注:A left join B on 與 A,B where 有相同效果,如下:
select student.* ,Score.* from student inner join Score on student.id=Score.sid
select student.* ,Score.* from student,Score where student.id=Score.sid
(2)右連接(right join ……on)
select student.* ,Score.* from student right join Score on student.id=Score.sid
關系如下圖:
總結:right join 以右表為准,查詢出右表的所有數據,左表中有對應的則顯示出來,沒有對應的則顯示為null.
(3)全連接(full join ……on)
select student.* ,Score.* from student full join Score on student.id=Score.sid
總結:full join 是為
left和right的集合,某表中某一行在另一表中無匹配行,則相應列的內容為NULL。
三、交叉連接(cross join),注意沒有on條件
select student.* ,Score.* from student cross join Score
叉聯接也稱作笛卡爾積。相當於兩個表中的所有行進行排列組合。
若表a有X行,表b有Y行,則將返回XY行記錄。
