Sql關聯查詢之inner join、left join、 right join、outer join

一、先來兩個表

  • t_person表
number(pr_key) name class
001 張三 三班
002 李四 三班
003 王五 三班
004 劉六 三班
  • t_grade_list表
id (pr_key) num name grade
a 001 張三 99
b 002 李四 21
c 003 王五 88
g 101 馬七 66

二、inner join(內連接)、left join(左連接) 、right join(右連接):

1、內連接(inner join):又叫等值連接,結果返回的是兩個表中連接字段相等的行。
例如:

	select tp.* , tg.grade from t_person tp
	inner join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc
	

description: 查詢出有成績學員的信息和成績並降序排列,兩個表中都存在的數據纔會返回,結果如下:
在這裏插入圖片描述

2、左連接(left join) :又叫左外連接,返回的結果是返回左表中所有的記錄以及右表中連接字段相等的記錄,沒有匹配結果使用NULL填補,即左表全部行+右表匹配的行。(a left join b 默認 a爲左表)
例如:

	select tp.* , tg.grade from t_person tp
	left join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc

description: 查詢出人員表中所有學員的信息、有成績的就加上、沒成績的就null填充。並以成績降序排列,以左表爲主表,結果如下:
在這裏插入圖片描述
3、右連接(right join): 返回右表中所有的記錄以及左表中連接字段相等的記錄,沒有匹配結果使用NULL填補,即右邊全部行+左邊匹配的行。(a left join b 默認 b爲右表、以右爲主)
例如:

	select tp.* , tg.grade from t_person tp
	right join t_grade tg on tp.number = tg.num
	where 1 = 1
	ORDER BY  tg.grade desc

description: 查詢出人員表中所有成績單裏學員的成績和信息、有信息的就加上、沒信息的null填充,並以成績降序排列,以右表爲主表,左右連接剛好相反。結果如下:
在這裏插入圖片描述


  • 補充:還有個外連接 (outer join):博主主要用的是mysql、據悉mysql沒有外連接。外連接可以用左右union實現,如下:
select tp.* , tg.grade from t_person tp left join t_grade tg on tp.number = tg.num
union
select tp.* , tg.grade from t_person tp right join t_grade tg on tp.number = tg.num
where 1 = 1
ORDER BY  grade desc

description: 外連接就是左右結合的效果,結果如下:
在這裏插入圖片描述

  • 很久沒寫博客了、數據庫查詢之連接相對於是比較簡單的東西,就當寫個日記吧。如果對你有幫助、記得點個贊喔。如有錯誤還望指正哈。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章