內連接與左外鏈接的區別


 

mysql 版本:5.5.13

 

理論部分
 
連接概述:
根據連接條件(on 子句),將兩張表的相關內容組織成一個結果集
 
內連接與左外鏈接的區別描述:
使用內連接時,不符合連接條件的數據,(不管是左表中的還是右表中的)都不會被組織到結果集中
使用左外連接時,對於不符合連接條件的數據,左表中的內容依然會被組織到結果集中,結果集中該條數據對應的右表部分為 null
 
 
實例
 
 

工資表(salary_info)

create table salary_info(

name varchar(80) comment '員工姓名',

salary decimal(16,2) comment '工資'

) 

內容

INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES ('張大胖', '10000');
INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES ('小李', '5000');
INSERT INTO `examination_questions_practice`.`salary_info` (`name`, `salary`) VALUES ('王師傅', '20000');
name
salary
張大胖 10000
小李 5000
王師傅 20000

 

獎金表(bonus_info)

create table bonus_info(

name varchar(80)  comment '員工姓名',

bonus decimal(16,2) commetn '獎金'

)

內容

INSERT INTO `bonus_info` (`name`, `bonus`) VALUES ('張大胖', '2000');
INSERT INTO `bonus_info` (`name`, `bonus`) VALUES ('王師傅', '3000');
name bonus
張大胖 2000
王師傅 3000
 
 
需求
發工資的日子到了,根據工資表和獎金表,統計所有員工的應發薪水
 
如果使用內連接,sql 語句如下:
select a.name as '員工姓名', (IFNULL(a.salary,0) + IFNULL(b.bonus,0)) as '應發薪水'
from salary_info a 
inner join bonus_info b 
on a.name=b.name

運行結果:

員工姓名 應發薪水
張大胖 12000
王師傅 23000
於是,小李感覺很委屈,因為他的工資沒到賬

左外連接:,sql 語句如下:
select a.name as '員工姓名', (IFNULL(a.salary,0) + IFNULL(b.bonus,0)) as '應發薪水'
from salary_info a 
left join bonus_info b 
on a.name=b.name

運行結果

員工姓名 應發薪水
張大胖 12000
小李 5000
王師傅 23000
小李也正常收到了工資
注:
當一個不為 null 的數值與一個為 null 的數值相加時,得到的結果為 null。
故用 IFNULL 函數,當參與計算的數值為 null 時,用數字 0 代替其參與計算。
如果不用,那么左外連接的結果就是小李對應的應發薪水為 null
 
 
 
輔助理解
 
內連接時,連接后的結果集為:
a.name a.salary b.name b.bonus
張大胖 10000 張大胖 2000
王師傅 20000 王師傅 3000
運行以下 sql,得到內連接的結果集
select *  
from salary_info a 
inner join bonus_info b 
on a.name=b.name

 

左外連接時,連接后的結果集為:
a.name a.salary b.name b.bonus
張大胖 10000 張大胖 2000
小李 5000 null null
王師傅 20000 王師傅 3000
運行以下 sql,得到左外連接的結果集
select *  
from salary_info a 
left join bonus_info b 
on a.name=b.name

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM