外部联接"+"
  Oracle总有一些突破标准SQL的新手段让人耳目一新,既考虑了效率,写起来又顺手,只是普通的开发人员往往想不起来用到它.
  外部联接就是一种.此外,在后来的9i以上版本中还出现了几种极其有效的新手段,功能强大而书写又很简洁,留待下次整理后贴出.
  外部联接其实早就出现了,但真正用到的有心人还是只占少数.当然,也不排除一些人是从移植性的角度去考虑而特地避开的情况.
 
外部联接"+"的概念与用法 
  外部联接"+"按其在"="的左边或右边分左联接和右联接.
  若不带"+"运算符的表中的一个行不直接匹配于带"+"预算符的表中的任何行,则前者的行与后者中的一个空行相匹配并被返回.
  若二者均不带"+",则二者中无法匹配的均被返回.
  利用外部联接"+",可以替代效率十分低下的 not in 运算,大大提高运行速度.
 
  举出实例最说明问题——
  例如,下面这条命令执行起来很慢 
  用外部联接提高表连接的查询速度 
  在作表连接(常用于视图)时,常使用以下方法来查询数据: 
SELECT PAY_NO, PROJECT_NAME 
FROM A 
WHERE A.PAY_NO NOT IN (SELECT PAY_NO FROM B WHERE VALUE >=120000); 
---- 如果表A有10000条记录,表B有10000条记录,在我的01年的老PC上要用掉差不多30分钟多一点, 因为 NOT IN 要进行一条一条的比较,共需要10000*10000 次比较后,才能得到结果。改用外部联接,可大大缩短查询时间,我机子上测试为1分左右: 
SELECT PAY_NO, PROJECT_NAME 
FROM A,B 
WHERE A.PAY_NO=B.PAY_NO(+) 
AND B.PAY_NO IS NULL 
AND B.VALUE >=12000; 
 
又比如:
select a.empno from emp a where a.empno not in 
(select empno from emp1 where job=’SALE’); 
若利用外部联接,改写命令如下: 
select a.empno from emp a ,emp1 b 
where a.empno=b.empno(+) 
and b.empno is null 
and b.job='SALE'; 
可以发现,运行速度明显提高. 
  其实,如果从算法的复杂度分析也可以明显看出外部联接的好处, 相当于接近减少了一个维,例如10000*10000次,现在其中的一个10000变成个位数,复杂度数量级很快就下来了
  在应用中从效率出发注意这些工具的使用,对未来系统上线应用的性能提高会有很大的帮助。就好象你对oracle好,oracle也会对你好!