与ansi标准join
符号相比,使用oracle的加号符号(+)
有什么不同?
在性能上有区别吗?
加号表示法是否已弃用?
发布于 2014-10-21 18:19:49
最全面的答案显然是nagul的答案。
对于那些正在寻找ANSI语法的快速转换/映射的人:
--
-- INNER JOIN
--
SELECT *
FROM EMP e
INNER JOIN DEPT d ON d.DEPTNO = e.DEPTNO;
-- Synonym in deprecated oracle (+) syntax
SELECT *
FROM EMP e,
DEPT d
WHERE d.DEPTNO = e.DEPTNO;
--
-- LEFT OUTER JOIN
--
SELECT *
FROM EMP e
LEFT JOIN DEPT d ON d.DEPTNO = e.DEPTNO;
-- Synonym in deprecated oracle (+) syntax
SELECT *
FROM EMP e,
DEPT d
WHERE d.DEPTNO (+) = e.DEPTNO;
--
-- RIGHT OUTER JOIN
--
SELECT *
FROM EMP e
RIGHT JOIN DEPT d ON d.DEPTNO = e.DEPTNO;
-- Synonym in deprecated oracle (+) syntax
SELECT *
FROM EMP e,
DEPT d
WHERE d.DEPTNO = e.DEPTNO(+);
--
-- CROSS JOIN
--
SELECT *
FROM EMP e
CROSS JOIN DEPT d;
-- Synonym in deprecated oracle (+) syntax
SELECT *
FROM EMP e,
DEPT d;
--
-- FULL JOIN
--
SELECT *
FROM EMP e
FULL JOIN DEPT d ON d.DEPTNO = e.DEPTNO;
-- Synonym in deprecated oracle (+) syntax !NOT WORKING!
SELECT *
FROM EMP e,
DEPT d
WHERE d.DEPTNO (+) = e.DEPTNO(+);
发布于 2009-07-28 12:08:53
Oracle10(我相信是11)仍然支持这种表示法。它的使用被认为是“老式的”,而且也不像ANSI JOIN语法那样具有数据库可移植性。它也被认为可读性差得多,尽管如果你来自+背景,习惯ANSI连接可能需要一点时间。在向Oracle扔砖头之前要知道的重要一点是,他们在ANSI委员会完成连接的定义之前就开发了+语法。
没有性能差异;它们表达的是相同的东西。
编辑:“不能移植”我应该说“只在Oracle SQL中支持”
发布于 2014-05-23 12:55:39
我使用(+)表示法,因为几乎所有与Oracle Apps r12相关的查询都基于此。在Oracle应用程序查询中(甚至是Oracle自己提供的查询),我还没有看到一个带有标准"join“表达式的SQL查询。如果你不相信我,就用谷歌搜索任何与甲骨文应用相关的信息。例如:Fixed assets related queries
https://stackoverflow.com/questions/1193654
复制相似问题