sql - 联接中 WHERE 和 AND 子句的区别

标签 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 值。

最佳答案

on 条件用于在联接表中查找匹配的行。使用外连接(右连接或左连接),不匹配 on 条件的行仍可能出现在结果集中。

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

关于sql - 联接中 WHERE 和 AND 子句的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15065077/

相关文章:

mysql - 有效地返回 3 个表中的最低分组值

MySQL:连接与按位运算符及其性能

MySQL SELECT 查询假设 1623x=1623 为 True

MYSQL - INSERT INTO 使用表 1 的 WHERE 条件

sql - WHERE 和 AND 子句不返回值

php - CakePHP SQL 准备语句

MySQL - 检索每个用户每天的最后更新

sql - 我可以从 sql server 中的一个 sql 查询中获取 count() 和行吗?

dataframe - Pyspark Dataframe 差异 - param != null 不返回的地方?

sql - 带连接的 Postgres RETURNING 子句