背景
- 在一次面試的時候,面試官讓我說一下這三者的使用場景和區別,當時瞬間懵逼,哈哈。回來趕快看一看,記下來。
詳解
- inner join
- 等值查詢:返回兩張表中,聯結字段值相等的組合記錄
- 舉例:所有學生參加考試,學生考試結果查詢
- 表如下
表Student(學生表)記錄如下: t_id name 1 龍 2 情 3 風 4 月 5 度 表Score(分數表)記錄如下: c_id num t_id 1 50 1 2 88 2 3 90 3 4 62 4 5 0 5
- 查詢語句:select s.t_id,s.name,c.num from Student s inner join Score c on s.t_id=c.t_id;
- 查詢結果
t_id name num 1 龍 50 2 情 88 3 風 90 4 月 62 5 度 0
- 表如下
- left join
- 左外關聯查詢:返回包括左表中的所有記錄和右表中聯結字段有關的組合記錄。如果左表中數據多於右表,查詢結果中右表的數據為null。
- 舉例:一個學生沒有參加考試,查詢考試結果
- 表如下
表Student(學生表)記錄如下: t_id name 1 龍 2 情 3 風
4 月 5 度表Score(分數表)記錄如下:
c_id num t_id
1 50 1
2 88 2
3 90 3
4 62 4 - 查詢語句:select s.t_id,s.name,c.num from Student s left join Score c on s.t_id=c.t_id;
- 查詢結果
t_id name num 1 龍 50 2 情 88 3 風 90 4 月 62 5 度 null
- 表如下
- right join
- 右外關聯查詢:返回包括右表中的所有記錄和左表中聯結字段相等的組合記錄。如果右表中數據多於左表,查詢結果中左表的數據為null。
- 舉例
- 表如下
表Student(學生表)記錄如下: t_id name 1 龍 2 情 3 風 表Score(分數表)記錄如下: c_id num t_id 1 50 1 2 88 2 3 90 3 4 62 4
- 查詢語句:select s.t_id,s.name,c.num from Student s rightjoin Score c on s.t_id=c.t_id;
- 查詢結果如下
t_id name num 1 龍 50 2 情 88 3 風 90 null null 62
- 表如下