同一张表求同一个字段,左连接会有两种情况

是这样子的。题目要求为求员工姓名和员工的领导的姓名。

img

在emp表里的mgr和empno进行连接:

第一种写法返回了12行值:

img

第二种就返回了18行值:

img


并且员工和领导的列值也不对。
所以是为什么出现了这种情况,求告知呀
万分感谢!

首先,对于员工表来说,领导字段mgr可能存在,也可能不存在,但是empno肯定存在。两种不同的关联写法,区别是以mgr字段为主表还是以empno字段为主表,所以结果会不同。第二种写法,由于empno一定存在,所以数查询出的量就会多余第一种结果

-- 返回18行
select e.ename '员工' ,d.enamea '领导'
from emp e
left join emp d on e.empno = d.mgr;

-- 返回12行
select e.ename '员工',d.ename '领导'
from emp e
left join emp d on e.mgr = d.empno;

left join 是以第一个表为准(此处为e表),e.mgr有null的时候,数据就会少

mgr有空值是主要原因吧

加上where条件 mgr is not null

不是一对一的关系吧

第二种其实是查员工有哪几个下属。主要问题:e.empno = d.mgr,关联条件是 e 是 d 的领导。