码迷,mamicode.com
首页 > 其他好文 > 详细

内连接与左外链接的区别

时间:2019-01-05 15:07:52      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:统计   条件   char   一个   span   ifnull   size   from   sql   

 

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

 

 

内连接与左外链接的区别

标签:统计   条件   char   一个   span   ifnull   size   from   sql   

原文地址:https://www.cnblogs.com/stone94/p/10224415.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!