我想知道这两个SQL查询之间的区别。注意:外键= dept_no
Query1:
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(+);基本上我的问题是关于外部连接的位置。谢谢!
发布于 2011-09-20 01:57:09
outer join的位置(左或右)决定从哪个表返回所有行,即使相关表中不存在匹配的行也是如此。因此..。
第一个(left outer join)将返回所有员工信息(emp中的所有行),即使没有与部门关联。
第二个(right outer join)将返回所有部门名称和部门编号(dept中的所有行),即使没有员工属于该部门也是如此。
发布于 2011-09-20 02:13:20
您将问题标记为mysql,但是您正在使用的特殊outer join语法是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发布于 2011-09-20 02:00:44
这是Table 1 (LEFT outer join) Table 2和Table 1 (RIGHT outer join) Table 2之间的典型区别,前者提供了表1中的所有记录,包括表2中缺少关联的记录,而后者则相反。
https://stackoverflow.com/questions/7475159
复制相似问题