數據庫中的表連接

數據庫中表的連接可以分爲:內連接、外連接。

1. 內連接(INNER JOIN)

在這裏插入圖片描述

內連接的關鍵字是INNER JOIN,語法如下:

INNER JOIN table_name ON condition;

用下來一個例子來解釋:

存在一個Student表如下表示
在這裏插入圖片描述

存在一個Score表如下表示
在這裏插入圖片描述

如果執行SQL命令select * from student inner join score;,可以得到以下結果:
在這裏插入圖片描述

在這裏插入圖片描述

可以發現內連接只是將兩張表橫向的拼接起來了,第二張表的每一行依次的添加到了第一張表每一行後面,Student表有9行,score表有13行,最終拼接的表是9*13=117行

如果在拼接的時候適當的增加條件,如執行SQL命令select * from student st inner join score sc on st.s_no=sc.s_no;後,得到如下結果
在這裏插入圖片描述

可以發現得到了兩個表的s_no的交集,在Student表中s_no爲106,107,108的項被捨棄了。(這裏人名出現重複是因爲在score表的創建時我使用的是{s_no,c_no}聯合主鍵,所以s_no可以重複,一般不會出現這種情況。)

2. 外連接(OUTER JOIN)

外連接應該是SQL中最常用的表連接方式,可以分爲左連接右連接全連接

2.1 左連接(LEFT JOIN)

在這裏插入圖片描述

左連接的關鍵字是LEFT JOIN

還是以Student和score兩個表來說明左連接到底做了什麼

如果執行SQL命令select * from student st left join score sc on st.s_no=sc.s_no;,可以得到以下結果:
在這裏插入圖片描述

可以發現這裏和內連接相比,保留了s_no爲106,107,108的項,因爲在以上SQL語句中,是用score表中的數據來匹配Student表中的數據

爲了和下面的右連接做比較,再執行select * from score sc left join student st on st.s_no=sc.s_no;,可以得到以下結果:
在這裏插入圖片描述

以上結果是用student表中的數據來匹配score表中的數據,在score表中沒有s_no爲106,107,108的項,所以最終結果中也沒有s_no爲106,107,108的項

2.2 右連接(RIGHT JOIN)

在這裏插入圖片描述

左連接的關鍵字是RIGHT JOIN

如果執行SQL命令select * from student st right join score sc on st.s_no=sc.s_no;,可以得到以下結果:
在這裏插入圖片描述

再執行select * from score sc left join student st on st.s_no=sc.s_no;,可以得到以下結果:
在這裏插入圖片描述

很容易發現左連接得到的兩個結果與右連接得到的兩個結果剛好相反,即Table A 左連接 Table B等價於Table B 右連接 Table A

2.3 全連接(FULL JOIN)

在這裏插入圖片描述

MYSQL8不支持全連接,可以用左連接+右連接+去重來模擬全連接

執行SQL語句select * from student st right join score sc on st.s_no=sc.s_no union select * from student st left join score sc on st.s_no=sc.s_no;,可以得到以下結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章