当前位置: 代码迷 >> Oracle开发 >> inner/left/right join 和 (+) 的区别解决思路
  详细解决方案

inner/left/right join 和 (+) 的区别解决思路

热度:58   发布时间:2016-04-24 07:44:15.0
inner/left/right join 和 (+) 的区别
这两种方式有效率差别吗?

多表多字段连接能用(+)吗?
感觉就算能用写出来也比较混乱.

求教!

------解决方案--------------------
Oracle 建议你用在From语句后用Outer Join语法 而不是Oracle的Join操作符(+).而且(+)是要受下面的规则限制的,但Outer Join语法则不受的~~

1)你不可以在查询块中使用(+) 当它同时包含 join的from语句中
2)(+)只是在where语句中,并且只能对应一个表或视图的一行字段
3)如果A和B做联接时有多个条件,那么(+)必须完善所有的匹配条件,
如果没有 ,oracle不会警告你~只是结果自然不同的
4)不可以在作出一个表外查询 另张表内查询的(+)联接操作~~
5)不可以用(+)外联接到自己 当然Self Join是可以的
6)含(+)的Where后的注意
OR不可用
IN不可用
子查询不可用

以下给些个例子:

SQL code
SQL> desc part Name                                      Null?    Type ----------------------------------------- -------- ----------------- PART_ID                                   NOT NULL VARCHAR2(4) SUPPLIER_ID                                        VARCHAR2(4)SQL> select * from part;PART SUPP---- ----P1   S1P2   S2P3P4SQL> desc supplier Name                                      Null?    Type ----------------------------------------- -------- ----------------- SUPPLIER_ID                               NOT NULL VARCHAR2(4) SUPPLIER_NAME                             NOT NULL VARCHAR2(20)SQL> select * from supplier;SUPP SUPPLIER_NAME---- --------------------S1   Supplier#1S2   Supplier#2S3   Supplier#3SQL> select p.part_id, s.supplier_name  2  from part p, supplier s  3  where p.supplier_id = s.supplier_id (+);PART SUPPLIER_NAME---- --------------------P1   Supplier#1P2   Supplier#2P3P4--(+)是单向的SQL> select p.part_id, s.supplier_name  2  from part p, supplier s  3  where p.supplier_id (+) = s.supplier_id (+);where p.supplier_id (+) = s.supplier_id (+)                        *ERROR at line 3:ORA-01468: a predicate may reference only one outer-joined table--实现Full Join的方法SQL> select p.part_id, s.supplier_name  2  from part p, supplier s  3  where p.supplier_id = s.supplier_id (+)  4  union  5  select p.part_id, s.supplier_name  6  from part p, supplier s  7  where p.supplier_id (+) = s.supplier_id;PART SUPPLIER_NAME---- --------------------P1   Supplier#1P2   Supplier#2P3P4     Supplier#3--现在的语法 SQL> select p.part_id, s.supplier_name  2  from part p full outer join supplier s  3  on p.supplier_id = s.supplier_id;PART SUPPLIER_NAME---- --------------------P1   Supplier#1P2   Supplier#2P4P3     Supplier#3
  相关解决方案