在公司写代码经常要用到左连接
大家对sql都不是很精通有些同事却一直以(+)效率高为理由,提倡用(+)
他们认为这是oracle自己特有的语法,有经过优化
而且都说曾经比较过效率个人坚持使用left join 
可读性高、功能更全面、通用性强、而且是新标准
很少使用(+),感觉不到有效率的差别,从执行计划上看也是相同的
而(+)这种语法也不能说是oracle的特有的,像sql server就有*=的用法
我觉得这是sql标准的区别请教高手
如果有区别,麻烦举例
如果没区别,我改如何说服其他同事

解决方案 »

  1.   

    left/right join等同于(+),前者是sql99标准,oracle 9i开始在逐渐取代(+)的方式 
      

  2.   

    效率是一样的,个人推荐使用left/right join,可读性强。
    因为你使用left/right join别人一看便知是左连接好是右连接,而对(+)还得"判断"下。
      

  3.   

    好像推荐是用 标准sql写吧    其他数据库语言貌似不支持(+)
      

  4.   

    大家的回答让我很惊讶
    好像大家都偏向支持我的理解
    就不明白公司的同事理解都跟我对立在我映像中许多高手都是经常用(+)的
    难道这里没有支持用(+)的吗
    是这里大家都是从9i学起的
    还是连老手也都“改邪归正”了我这里最需要的是已经习惯写(+)的老手站出来为我说话
    说明自己用(+)完全只是习惯,支持使用left join
      

  5.   

    1楼是对的。我最近也刚好在看一本书。 from table_A left join table_B on (...)逐渐在取代原来orcle的老的(+)的写法。这样子写可以更加直观。效率方面我不清楚。但是oracle即便对它进行了优化,那么肯定也是9i以后写法要比9i以前的写法效率要好吧(这个逻辑符合生活常识,呵呵)。所以我个人建议left join写法。
      

  6.   

    没什么区别,统一风格
    推荐是用 标准sql写吧
      

  7.   

    当我看到这个贴子的时候,竟然已经是结了的.而且是结了好久的.
    我也懒的去发新贴了.想到的就写写,这个从N个方面来说.
    首先 oracle 如果说9I上效率一样了,一般会在10G上才能做到.
    而现在的问题是,老人一般都不太上网,很少来关注,left join 跟(+)效率是不是真的一样了.而真的要说规范的话,首先要批评一个left join 
    如果SQL99,只有left join 没有right join 的话,
    那还好说一点.因为这样还比较好记是左边的表为主,还是右边的表为主.而且,每次使用left join 然后,再去网上查一下哪个是主表..但是oracle 的(+)
    只要是看过一次的人立即就知道了.因为这个(+) 跟使用左连接的这个场景是完全相同的.student.teacherId = teacher.id(+)
    有的学生没选老师,老师只是附加信息.而
    student left join teacher on ...
    这个就不能一眼看出来..因为你还是不知道左是主,还是右是主..更有一些理论的人,会告诉你,如果left join 左主,right join 右主.所以,.....
    就有一些懒一点的人,还是直接使用(+)
    完事了..而会用(+)的人,平均水平比left join 的人会稍好一些.这样就更难于在公司里你强要求left join 了.总不能说是技术骨干或经理,按你的方式要求...这就是公司的现状.而对新人说:你们多学一个(+)总比老人检查你们其它的代码,然后,再多改一个left join 的习惯要容易......