听一个人说 9i以后,Oracle的(+)的左右连接的方式不被推荐使用了,是这样么?
  弱弱的问。

解决方案 »

  1.   

    9i之前也能用(+)
    现在也一直能用由于(+)不是标准sql里的 所以如果移植到其他数据库可能就不行
      

  2.   

    不被推荐使用了 理由如楼上所说
    我的前辈跟我说的时候也说 (+)理解起来不直观 统一用join代替了
    不过你想用的话 也没问题
      

  3.   


    /*
    Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 
    Connected as scott
    */
    --下面是一个小实例:
    create table a(
      name varchar2(10),
      score int
      );
      
    create table b(
           name varchar2(10),
           score int
           );
           
    create table c(
           name varchar2(10),
           score int
           );
           
    --data:
    insert into a(name,score) values('李华',20);
    insert into a(name,score) values('刘东',30);
    insert into a(name,score) values('小三',20);insert into b(name,score) values('李华',40);
    insert into b(name,score) values('刘东',50);
    insert into b(name,score) values('小四',70);insert into c(name,score) values('李华',100);
    insert into c(name,score) values('刘东',100);
    insert into c(name,score) values('小五',100);3张表人员不一样,以表c的人员为准,
    求每个人分别在c、b中的score与a的score之差,
    如果c中的人员在a、b中不存在,则其在a、b中的scroe按0计算.
    SQL> select c.name, c.score-nvl(a.score,0) as score
      2  from c,a
      3  where c.name=a.name(+)
      4  union all
      5  select c.name,c.score-nvl(b.score,0)
      6  from c,b
      7  where c.name=b.name(+);
    /*
    NAME            SCORE
    ---------- ----------
    李华               80
    刘东               70
    小五              100
    李华               60
    刘东               50
    小五              100
    */
      

  4.   

    首先(+)语法全部可以用标准语法代替,反之则不然
    而且从性能上没任何优势
    可读性差、扩展性差
    坚决抵制外连接用(+)对我们这些从标准sql学起的
    又直接从9i、10g接触的,已习惯标准语法走入职场,却由于你们这些老手的习惯用(+)
    我们新手们都得顺便理解这种旧语法