【问题标题】:Difference between WHERE and AND clauses in joins连接中 WHERE 和 AND 子句的区别
【发布时间】:2013-02-25 10:40:58
【问题描述】:

谁能解释一下为什么下面的 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 值的记录。

【问题讨论】:

  • 您是否尝试过比较每个查询的结果有无d.department_name='Treasury' 条件?

标签: sql join where-clause


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      先将条件应用到join和all后取出的所有记录上,然后应用到最终返回的结果中。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-19
        • 2015-04-22
        • 2012-03-21
        • 2012-01-08
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 2012-02-19
        相关资源
        最近更新 更多