mysql内连接和外连接的区别(内连接的定义)

 分类:IT知识时间:2023-07-24 07:31:01点击:

外连接和内连接的区别:

1、内连接:假设A表和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。

2、外连接:假设A表和B表进行连接,使用外连接的话,AB两张表中有一张是主表,一张是副表,主要查询主表中的数据,捎带着查询副表中的数据,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出null与之匹配。

3、内连接会出现数据丢失的情况,内连接只展示能够匹配上的数据,匹配不上的数据就不是显示。外连接中主表的数据一定会展示的,如果主表中的一条数据副表中没有任何数据可以与之匹配,那么副表自动模拟null值与主表中的那条数据进行匹配。

现有如下一张员工表数据:

员工信息

1)查询每个员工的上级领导名字:MGR:上级领导编号

分析:KING的职位是最高的,所以他的上级领导mgr的值为null。没有与之匹配的,所以我们使用内连接的话,king这条记录应该是没有的。

selecta.ename , b.ename fromemp a joinemp b ona.mgr = b.empno;

内连接查询员工领导名字

通过结果我们发现再内连接查询员工领导信息的时候,总共只有13条记录,而员工信息一共有14条,将领导信息为king的员工自动忽略了。这个时候我们可以通过外连接再来查询员工的领导信息。

selecta.ename , b.ename fromemp a leftjoinemp b ona.mgr = b.empno;

左连接查询员工领导信息

我们在看一个案列,我们增加一张表 部门表:

部门表

1)查询哪个部门没有员工

selectd.* , e.ename fromdept d leftjoinemp e ond.deptno = e.deptno;

通过结果我们发现,只有部门编号为40的部门员工信息为null,所以我们只要稍微修改下sql,将最终展示的信息为部门40的就行了。

selectd.* fromdept d leftjoinemp e ond.deptno = e.deptno wheree.ename isnull;

查询没有员工的部门信息

除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: