我访问过许多网站,找到有关哪个更好的答案(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?..谁能假设一张桌子并给我解释
两种语法通常都可以正常工作,但是如果您尝试添加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;
另外,识别外部联接也很容易,并且不要忘记包含(+)。总的来说,您可以说这只是一个品味问题,但事实是第二种语法更具可读性,并且不易出错。