3

有人可以解释为什么以下 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 值的记录。

4

3 回答 3

3

on在连接表中查找匹配行时使用该条件。使用外连接(右连接或左连接),与条件不匹配的行on仍然可以在结果集中结束。

where条件适用于所有选定的行。任何未通过where测试的行都将从结果集中排除。

于 2013-02-25T10:49:02.773 回答
1

第一个返回任何部门名称为“Treasury”的已连接记录,因此部门表中的每条记录都将被连接,但第二个意味着只有部门名称为“Treasury”的部门表中的记录将被连接。

于 2013-02-25T10:46:04.940 回答
0

先把条件加到应用join和all后取出的所有记录上,这样就应用到最终返回的结果上。

而第二个返回右表中的所有记录,即使连接条件不匹配,因为它是右连接。

于 2013-02-25T10:48:28.227 回答