术语定义
保留行表: 外连接条件中不包含+号的表
注意:不包含+号的表是指在外连接条件中。 如下例所示:
where d.deptno(+)=10 无保留行表
where d.deptno(+)=70 无保留行表
where d.deptno=e.deptno(+) d 是保留行表表
where d.deptno(+)=e.deptno e 是保留行表表
where d.deptno=10 不考虑,普通的连接条件
where d.deptno(+)=e.deptno and e.deptno(+)=10 无保留行表 d和e均包含了+号
左外连接中左边的表。
右外连接中右边的表。
全外连接中全部的表。
替换 NULL 的表:
左外连接中右边的表
右外连接中左边的表
全外连接中全部的表
在全外连接中,两张表既可以保留行,也可以替换 NULL。
当不存在匹配的行时,替换 NULL 的表替换 NULL。如果连接操作中不存在匹配,任何在 SELECT 列中引用的替换 NULL 表的列都将替换为NULL。
外连接的处理
1 取出外连接的两个表: d,e 见图1,2
2 取出满足连接条件的所有行,加上保留行表中所有不满足连接条件的行,
不满足连接条件的行的组成:
保留行表中的列保留原值,替换 NULL 的表中的列都将包含 NULL。
3 几种特殊情况
a 见图3,4
where d.deptno(+)=10 无保留行表
where d.deptno(+)=70 无保留行表
b. 见图5,6
where d.deptno(+)=e.deptno and e.deptno(+)=10
<==>
where d.deptno=e.deptno and e.deptno=10
c. 见图7,8
where d.deptno(+)=e.deptno and d.deptno(+)=10
<==>
d right join e on (d.deptno=e.deptno and d.deptno=10)
d. 见图9,10
where d.deptno(+)=e.deptno and d.deptno=10
<==>
d right join e on d.deptno=e.deptno where d.deptno=10
附d 的 sql代码
select D.DEPTNO as ddeptno,
D.DNAME,
E.EMPNO,
E.DEPTNO,
E.ENAME,
e.deptno as edeptno
from scott.D d , scott. E e
where d.deptno(+)=e.deptno and d.deptno=10
select D.DEPTNO as ddeptno,
D.DNAME,
E.EMPNO,
E.DEPTNO,
E.ENAME,
e.deptno as edeptno
from scott.D d right join scott. E e
on d.deptno =e.deptno
where d.deptno=10
图表 1
图表 2
图表 3
图表 4
图表 5
图表 6
图表 7
图表 8
图表 9
图表 10下载本文