这两种方式有效率差别吗?
多表多字段连接能用(+)吗?
感觉就算能用写出来也比较混乱.
求教!
------解决方案--------------------
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