1. 程式人生 > 其它 >sql語句的內連線、左外連線、右外連線的理解

sql語句的內連線、左外連線、右外連線的理解

技術標籤:sqlmysql資料庫

sql語句 內連線、左外連線、右外連線的理解

大家在初學資料庫時,對DQL中的連線查詢是否有些疑惑,不知道什麼時候什麼場景下該用那種連線查詢?
在這裡插入圖片描述
不要著急,接下來由我來給大家介紹一下,本人對內連線、左外連線、右外連線的特點和應用場景的理解,供大家參考。

以下的程式碼演示均基於name表和country表展開。
name表

idname
1西施
2楊玉環
3貂蟬
4王昭君
5趙飛燕

country表

idcountryA_ID
1春秋時期越國人1
2唐代蒲州永樂人2
3東漢末年山西忻州人3
4西漢時期南郡秭歸人4
5戰國時期6

注 :
1)b表A_ID與a表a_id 存在關係

2)連線查詢是要使用關聯條件去除不匹配資料否則會出現笛卡爾積

1) 內連線

語法:
	select  要查詢的欄位 from 表名1 inner join 表名2 on1.欄位 =2.欄位;
	inner join 可簡寫為 逗號,
內連線特點:
	只會保留完全符合on後條件的資料
應用場景:
	如果兩張表有外來鍵關係可以使用內連結,因為通過內連結每一條只能返回單條記錄
select * from name n inner join country c on n.id = c.N_ID;   
idnameidcountryN_ID
1西施1春秋時期越國人1
2楊玉環2唐代蒲州永樂人2
3貂蟬3東漢末年山西忻州人3
4王昭君4西漢時期南郡秭歸人4

2)左外連線

語法:
	select 要查詢的欄位 from1 left outer join2 on1.欄位 =2.欄位;
	outer 可省略
左外連線特點:
	以左表為主,會保留左表中不符合on後條件的資料
應用場景:
	只有部分記錄可以從表2中查到,但表1想要顯示所有記錄,就可以和表2通過左外連線查詢。
select * from name n left join country c on n.id=c.N_ID;  
idnameidcountryN_ID
1西施1春秋時期越國人1
2楊玉環2唐代蒲州永樂人2
3貂蟬3東漢末年山西忻州人3
4王昭君4西漢時期南郡秭歸人4
5趙飛燕nullnullnull

3) 右外連線

語法:
	select * from1 right outer join2 on1.欄位 =2.欄位;
	outer 可省略
右外連線特點:
	以右表為主,會保留右表中不符合on後條件的資料
應用場景:
	和左外連線相反
	只有部分記錄可以從表1中查詢到,但表2想要顯示所有記錄, 就可以和表1通過右外連線查詢。
select * from name n right join country c on n.id=c.N_ID;  
idnameidcountryN_ID
1西施1春秋時期越國人1
2楊玉環2唐代蒲州永樂人2
3貂蟬3東漢末年山西忻州人3
4王昭君4西漢時期南郡秭歸人4
nullnull5戰國時期6

4) 完全連結

語法:
	select * from1 full join2 on1.欄位 =2.欄位;
完全連線特點:
	會保留表1和表2的全部資料
select * from name n full join country c on n.id=c.N_ID; 
idnameidcountryN_ID
1西施1春秋時期越國人1
2楊玉環2唐代蒲州永樂人2
3貂蟬3東漢末年山西忻州人3
4王昭君4西漢時期南郡秭歸人4
5趙飛燕nullnullnull
nullnull5戰國時期6

注意:該語法在MySql中不適用
好的,本人介紹完畢,不知道有沒有幫助到各位呢?
如果有什麼不對,還請各位指出哦~
在這裡插入圖片描述