使用 ANSI 语法而不是旧 Oracle join syntax 的一个很好的理由是,没有机会偶然创建一个 cartesian product . 有了更多的表,有可能错过使用旧的Oracle连接语法的 implicit 连接,但是,使用ANSI语法,您不能错过任何连接,因为您必须提及它们 .
Oracle outer join syntax 和 ANSI/ISO Syntax 之间的区别 .
LEFT OUTER JOIN -
SELECT e.last_name,
d.department_name
FROM employees e,
departments d
WHERE e.department_id = d.department_id(+);
SELECT e.last_name,
d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
RIGHT OUTER JOIN -
SELECT e.last_name,
d.department_name
FROM employees e,
departments d
WHERE e.department_id(+) = d.department_id;
SELECT e.last_name,
d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
FULL OUTER JOIN -
在11gR1中对hash full outerjoin的本机支持之前,Oracle将在内部以下列方式转换FULL OUTER JOIN -
SELECT e.last_name,
d.department_name
FROM employees e,
departments d
WHERE e.department_id = d.department_id(+)
UNION ALL
SELECT NULL,
d.department_name
FROM departments d
WHERE NOT EXISTS
(SELECT 1 FROM employees e WHERE e.department_id = d.department_id
);
SELECT e.last_name,
d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);