连接中WHERE和AND子句之间的区别

时间:2013-02-25 10:40:58

标签: sql join where-clause

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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

第一个返回任何已连接的记录,其department_name为“Treasury”,因此department表中的每个记录都将被连接,但第二个记录表示只有department表中带有department_name“Treasury”的记录才会被连接。

答案 2 :(得分:0)

首先将条件放在应用join和all之后的所有记录上,因此它将应用于最终返回的结果。

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