我想知道这两个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(+);
基本上我的问题是关于外部加入的位置。 谢谢!
答案 0 :(得分:4)
outer join
(左或右)的位置确定从哪个表返回所有行,即使相关表中没有匹配的行也存在。因此...
第一个(left outer join
)将返回所有员工信息(emp
的所有行),即使与部门无关。
第二个(right outer join
)将返回所有部门名称&部门编号(来自dept
的所有行),即使没有员工属于该部门。
答案 1 :(得分:4)
您标记了问题mysql
,但您使用的特殊外连接语法是Oracle的专有发明。
MySQL在任何位置都不支持(+)
连接修饰符语法。
为什么不对LEFT OUTER JOIN
和RIGHT 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 2
和Table 1 (RIGHT outer join) Table 2
之间的经典差异,其中前者为您提供表1中的所有记录,包括表2中缺少关联的记录,后者则反之亦然。