外连接返回的结果,除了包含满足连接条件的记录,还包括不满足连接条件。
举个栗子:
在Oracle中自带的SCOTT用户表中,DEPT部门表有部门编号40的部门,EMP员工没有40部门的员工。
select * from emp e right join dept d on e.deptno=d.deptno;
右表:dept |左表:emp
该右连接查询语句,会保证右表的数据都显示(即使不满足 e.deptno=d.deptno条件的数据),左表不满足条件的列显示null。
select * from dept d right join emp e on d.deptno=e.deptno;
右表:emp |左表:dept
该右查询保证右表数据都会显示,所以不会显示部门40的信息
//----------------------------------------------------------------------------//
select * from dept d left join emp e on d.deptno=e.deptno;
右表:emp |左表:dept
上述左连接查询语句,会保证左表的数据都显示(即使不满足 e.deptno=d.deptno条件的数据),右表不满足条件的列显示null。
on条件里面add和where后面的add区别:
左连接:显示右表满足on连接条件的数据,所以on里面的add作为限制条件,限制右表显示的数据,不满足的列显示null。
右连接:显示左表满足on连接条件的数据,所以on里面的add作为限制条件,限制左表显示的数据,不满足的列显示null。
select * from dept d left join emp e on (d.deptno=e.deptno and d.DNAME=‘SALES’)
where作为指定查询条件,它的存在会让左连接或右连接都无效,只显示满足where查询条件的数据。
以下查询结果一致: