有人可以解释为什么以下SQL中有两种不同的结果集。
SQL 1 -
SELECT e.employee_id,e.first_name,
e.department_id,
d.department_id,
d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) where d.department_name='Treasury';
结果:仅记录d.department_name ='Treasury'。
SQL 2 -
SELECT e.employee_id,e.first_name,
e.department_id,`enter code here`
d.department_id,
d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) and d.department_name='Treasury';
结果:记录所有d.deparment_name值。
答案 0 :(得分:3)
在联接表中查找匹配的行时使用on
条件。使用外连接(右连接或左连接)时,与on
条件不匹配的行仍然可以在结果集中结束。
where
条件适用于所有选定的行。从where
测试失败的任何行都将从结果集中排除。
答案 1 :(得分:1)
第一个返回任何已连接的记录,其department_name为“Treasury”,因此department表中的每个记录都将被连接,但第二个记录表示只有department表中带有department_name“Treasury”的记录才会被连接。
答案 2 :(得分:0)
首先将条件放在应用join和all之后的所有记录上,因此它将应用于最终返回的结果。
第二个返回右表中的所有记录,即使连接条件不匹配,因为它是右连接。