SQL Outer JOIN语句之间的区别

时间:2011-09-19 17:54:18

标签: mysql sql database

我想知道这两个SQL查询之间的区别.. 注意:外键= dept_no

查询1:

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
from emp,dept
WHERE emp.dept (+)= dept.dept_no;

QUERY2:

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
from emp,dept
WHERE emp.dept = dept.dept_no(+);

基本上我的问题是关于外部加入的位置。 谢谢!

3 个答案:

答案 0 :(得分:4)

outer join(左或右)的位置确定从哪个表返回所有行,即使相关表中没有匹配的行也存在。因此...

第一个(left outer join)将返回所有员工信息(emp的所有行),即使与部门无关。

第二个(right outer join)将返回所有部门名称&部门编号(来自dept的所有行),即使没有员工属于该部门。

答案 1 :(得分:4)

您标记了问题mysql,但您使用的特殊外连接语法是Oracle的专有发明。

MySQL在任何位置都不支持(+)连接修饰符语法。

为什么不对LEFT OUTER JOINRIGHT OUTER JOIN使用ANSI SQL-92语法?然后你的查询就会很清楚,并且可以在Oracle和MySQL中运行。

SELECT emp_no, emp_name, emp.dept_no, dept_name, loc
FROM emp LEFT OUTER JOIN dept ON emp.dept = dept.dept_no

答案 2 :(得分:0)

这是Table 1 (LEFT outer join) Table 2Table 1 (RIGHT outer join) Table 2之间的经典差异,其中前者为您提供表1中的所有记录,包括表2中缺少关联的记录,后者则反之亦然。