小编典典

ANSI和非ANSI联接之间有什么区别,您推荐哪些?

sql

我访问过许多网站,找到有关哪个更好的答案(ANSI或非ANSI语法)。这两个查询有什么区别?

select a.name,a.empno,b.loc
from tab a, tab b
where a.deptno=b.deptno(+);

和:

select a.name,a.empno,b.loc
from tab a 
left outer join tab b on a.deptno=b.deptno;

在两种情况下,结果都是相同的。第二个查询也更长。哪一个更好?

假设是否基于需要连接它们的条件在上面的查询中添加了另一个表Salgrade?..谁能假设一张桌子并给我解释


阅读 206

收藏
2021-04-28

共1个答案

小编典典

两种语法通常都可以正常工作,但是如果您尝试添加where条件,您将发现使用第二种语法更容易理解哪个是连接条件,哪个是where子句。

1)

  SELECT a.name,
         a.empno,
         b.loc 
    FROM tab a,
         tab b 
   WHERE a.deptno = b.deptno(+)
     AND a.empno = 190;

2)

         SELECT a.name,
                a.empno,
                b.loc 
           FROM tab a,
LEFT OUTER JOIN tab b 
             ON a.deptno = b.deptno
          WHERE a.empno = 190;

另外,识别外部联接也很容易,并且不要忘记包含(+)。总的来说,您可以说这只是一个品味问题,但事实是第二种语法更具可读性,并且不易出错。

2021-04-28