外连接和内连接的区别:
1、内连接:假设A表和B表进行连接,运用内连接的话,凡是A表和B表能够匹配上的记录查找出来,这便是内连接。AB两张表无主副之分,两张表是平等的。
2、外连接:假设A表和B表进行连接,运用外连接的话,AB两张表中有一张是主表,一张是副表,重点查找主表中的数据,捎带着查找副表中的数据,当副表中的数据无和主表中的数据匹配上,副表自动模拟出null与之匹配。
3、内连接会显现数据丢失的状况,内连接只展示能够匹配上的数据,匹配不上的数据就不是表示。外连接中主表的数据必定会展示的,倘若主表中的一条数据副表中无任何数据能够与之匹配,那样副表自动模拟null值与主表中的那条数据进行匹配。
现有如下一张员工表数据:
员工信息
1)查找每一个员工的上级领导名字:MGR:上级领导编号
分析:KING的职位是最高的,因此他的上级领导mgr的值为null。无与之匹配的,因此咱们运用内连接的话,king这条记录应该是无的。 select
a.ename , b.ename
from
emp a
joinemp bon
a.mgr = b.empno;
内连接查找员工领导名字
经过结果咱们发掘再内连接查找员工领导信息的时候,总共仅有13条记录,而员工信息一共有14条,将领导信息为king的员工自动忽略了。这个时候咱们能够经过外连接再来查找员工的领导信息。 select
a.ename , b.ename
fromemp aleft join
emp b
on
a.mgr = b.empno;
左连接查找员工领导信息
咱们在看一个案列,咱们增多一张表 分部表:
分部表
1)查找哪个分部无员工 select
d.* , e.ename
from
dept d
left join
emp e
on
d.deptno = e.deptno;
经过结果咱们发掘,仅有分部编号为40的分部员工信息为null,因此咱们只要稍微修改下sql,将最后展示的信息为分部40的就行了。 select
d.*
from
dept d
left join
emp e
on
d.deptno = e.deptno
where
e.ename is null;
查找无员工的分部信息
|