返回行是 a = b 的行 + 左表的a 在右表没有匹配的 b值的行(右表的列填null)就是返回a表的所有行
不知道你是不很熟悉Full join的概念 还是Oracle里全联接的syntax +是oracle里outer join的操作符号 where a(+)=b 意思为 tablea right join tableb on a=b; EG: SQL> select test22.addr,test2.* from test2 right join test22 on test2.id=test22.id;ADDR ID NAME -------------------- ---------- -------------------- shanghai 1 shen beijing 2 liang nanjing 3 hello tianjingSQL> select test22.addr,test2.* from test2,test22 where test2.id(+)=test22.id;ADDR ID NAME -------------------- ---------- -------------------- shanghai 1 shen beijing 2 liang nanjing 3 hello tianjingSQL> select * from test22; ID ADDR ---------- -------------------- 1 shanghai 2 beijing 3 nanjing 10 tianjingSQL> select * from test2; ID NAME ---------- -------------------- 1 shen 2 liang 3 hello 4 word 5 java 6 delphi 7 c# 8 Grails已选择8行。建议先看看Oracle里的帮助文档 Oracle官方网站 有的~~ 对于(+)可能直接用 full join 、right join、left join、inner join更好理解些 当然你研究着用,自然没问题的~~
理解oracle中的外连接 术语定义 保留行表: 外连接条件中不包含+号的表 注意:不包含+号的表是指在外连接条件中。 如下例所示: 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均包含了+号
a = b 的行
+
左表的a 在右表没有匹配的 b值的行(右表的列填null)就是返回a表的所有行
+是oracle里outer join的操作符号
where a(+)=b 意思为 tablea right join tableb on a=b;
EG:
SQL> select test22.addr,test2.* from test2 right join test22 on test2.id=test22.id;ADDR ID NAME
-------------------- ---------- --------------------
shanghai 1 shen
beijing 2 liang
nanjing 3 hello
tianjingSQL> select test22.addr,test2.* from test2,test22 where test2.id(+)=test22.id;ADDR ID NAME
-------------------- ---------- --------------------
shanghai 1 shen
beijing 2 liang
nanjing 3 hello
tianjingSQL> select * from test22; ID ADDR
---------- --------------------
1 shanghai
2 beijing
3 nanjing
10 tianjingSQL> select * from test2; ID NAME
---------- --------------------
1 shen
2 liang
3 hello
4 word
5 java
6 delphi
7 c#
8 Grails已选择8行。建议先看看Oracle里的帮助文档 Oracle官方网站 有的~~
对于(+)可能直接用 full join 、right join、left join、inner join更好理解些
当然你研究着用,自然没问题的~~
术语定义
保留行表: 外连接条件中不包含+号的表
注意:不包含+号的表是指在外连接条件中。 如下例所示:
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。