sql語句的內連線、左外連線、右外連線的理解
阿新 • • 發佈:2021-01-11
sql語句 內連線、左外連線、右外連線的理解
大家在初學資料庫時,對DQL中的連線查詢是否有些疑惑,不知道什麼時候什麼場景下該用那種連線查詢?
不要著急,接下來由我來給大家介紹一下,本人對內連線、左外連線、右外連線的特點和應用場景的理解,供大家參考。
以下的程式碼演示均基於name表和country表展開。
name表
id | name |
---|---|
1 | 西施 |
2 | 楊玉環 |
3 | 貂蟬 |
4 | 王昭君 |
5 | 趙飛燕 |
country表
id | country | A_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 on 表1.欄位 = 表2.欄位;
inner join 可簡寫為 逗號,
內連線特點:
只會保留完全符合on後條件的資料
應用場景:
如果兩張表有外來鍵關係可以使用內連結,因為通過內連結每一條只能返回單條記錄
select * from name n inner join country c on n.id = c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋時期越國人 | 1 |
2 | 楊玉環 | 2 | 唐代蒲州永樂人 | 2 |
3 | 貂蟬 | 3 | 東漢末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西漢時期南郡秭歸人 | 4 |
2)左外連線
語法:
select 要查詢的欄位 from 表1 left outer join 表2 on 表1.欄位 = 表2.欄位;
outer 可省略
左外連線特點:
以左表為主,會保留左表中不符合on後條件的資料
應用場景:
只有部分記錄可以從表2中查到,但表1想要顯示所有記錄,就可以和表2通過左外連線查詢。
select * from name n left join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋時期越國人 | 1 |
2 | 楊玉環 | 2 | 唐代蒲州永樂人 | 2 |
3 | 貂蟬 | 3 | 東漢末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西漢時期南郡秭歸人 | 4 |
5 | 趙飛燕 | null | null | null |
3) 右外連線
語法:
select * from 表1 right outer join 表2 on 表1.欄位 = 表2.欄位;
outer 可省略
右外連線特點:
以右表為主,會保留右表中不符合on後條件的資料
應用場景:
和左外連線相反
只有部分記錄可以從表1中查詢到,但表2想要顯示所有記錄, 就可以和表1通過右外連線查詢。
select * from name n right join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋時期越國人 | 1 |
2 | 楊玉環 | 2 | 唐代蒲州永樂人 | 2 |
3 | 貂蟬 | 3 | 東漢末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西漢時期南郡秭歸人 | 4 |
null | null | 5 | 戰國時期 | 6 |
4) 完全連結
語法:
select * from 表1 full join 表2 on 表1.欄位 = 表2.欄位;
完全連線特點:
會保留表1和表2的全部資料
select * from name n full join country c on n.id=c.N_ID;
id | name | id | country | N_ID |
---|---|---|---|---|
1 | 西施 | 1 | 春秋時期越國人 | 1 |
2 | 楊玉環 | 2 | 唐代蒲州永樂人 | 2 |
3 | 貂蟬 | 3 | 東漢末年山西忻州人 | 3 |
4 | 王昭君 | 4 | 西漢時期南郡秭歸人 | 4 |
5 | 趙飛燕 | null | null | null |
null | null | 5 | 戰國時期 | 6 |
注意:該語法在MySql中不適用
好的,本人介紹完畢,不知道有沒有幫助到各位呢?
如果有什麼不對,還請各位指出哦~