oracle中关联查询条件"(+)="的问题

现在有两个表
dept1表
DEPT_ID DEPT_NAME
---------- ----------
1101 shichang
1102 yanfa
1103 xingzhen
1104 xiaoshou
emp1表
EMP_ID EMP_NAME
---------- ----------
1101 SMITH
1102 ELLE
1105 BLACK
1103 SCOTT
select a.emp_id,b.dept_id,a.emp_name,b.dept_name from emp1 a,dept1 b
where a.emp_id (+)=b.dept_id;出来的结果为

EMP_ID DEPT_ID EMP_NAME DEPT_NAME
---------- ---------- ---------- ----------
1101 1101 SMITH shichang
1102 1102 ELLE yanfa
1103 1103 SCOTT xingzhen
1104 xiaoshou

select a.emp_id,b.dept_id,a.emp_name,b.dept_name from emp1 a,dept1 b
2 where b.dept_id (+)=a.emp_id;出来的结果为

EMP_ID DEPT_ID EMP_NAME DEPT_NAME
---------- ---------- ---------- ----------
1101 1101 SMITH shichang
1102 1102 ELLE yanfa
1103 1103 SCOTT xingzhen
1105 BLACK
求大神告诉关联查询里where子句中(+)=的具体描述和作用...

用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在左表,右表就是全部显示,故是右连接。
SQL> Select * from dave a,bl b where a.id(+)=b.id;

ID NAME ID NAME
---------- ---------- ---------- ----------
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
9 怀宁

也可以用right outer join实现同样的功能:

SQL> select * from dave a right outer join bl b on a.id = b.id;
ID NAME ID NAME
---------- ---------- ---------- ----------
1 dave 1 dave
2 bl 2 bl
1 bl 1 dave
2 dave 2 bl
3 dba 3 big bird
4 sf-express 4 exc
9 怀宁 --此处左表不足用Null 填充
已选择7行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-11
这是左右边连接,很好判断,你看(+)在那边,那边就补空,如:a.emp_id (+)=b.dept_id那么b表的数据就全部被查询出来,a表没有这条数据就补空,讲多了你可能有点不明白 ,你记住一条就知道了,那边有(+),那边就补空!追问

补空的意思是?这规律我也知道,我试过了,我是想记笔记组织个什么语言能描述出来.以后翻起来能理解,或者别的情况下也能懂.

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网