100次浏览 发布时间:2024-08-10 09:18:45
外连接和内连接的区别:
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
join
emp b
on
a.mgr = b.empno;
通过结果我们发现再内连接查询员工领导信息的时候,总共只有13条记录,而员工信息一共有14条,将领导信息为king的员工自动忽略了。这个时候我们可以通过外连接再来查询员工的领导信息。
select
a.ename , b.ename
from
emp a
left 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;