mysql - 如果使用 where 子句,外连接给出与内连接相同的结果

标签 mysql sql join left-join inner-join

以下SQL语句:

select * from employees e   
left join departments d on e.deptid = d.deptid   
where ( d.deptname = 'HR' or d.deptname  = 'HR & Accounts')    

产生与以下内部联接相同的结果:

select * from employees e  
   inner join departments d on e.deptid = d.deptid and d.deptname like '%HR%';  

它们以何种方式产生相同的结果。

我的意思是第一个查询等价,例如的:

  1. 从员工中选择 * 并使用 where 进行过滤
  2. 左加入吗?

第一个查询的步骤是什么使它与内连接相同?

最佳答案

对于不符合外连接条件的行,连接表中任意一列的值为NULL。 Where 子句发生在(概念上) 连接被处理之后,因此测试这些列的任何条件都将为假(或者,严格来说,为 NULL)。

如果您想要包含一个表中的所有行,但只匹配第二个表中满足条件的行,则必须将该条件添加到 Outer Join 的 ON 子句中。

另外请注意,由于内部联接会丢弃不匹配的行,因此内部联接的 ON 子句中的条件与 Where 子句中的条件具有相同的效果。

关于mysql - 如果使用 where 子句,外连接给出与内连接相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909706/

相关文章:

Mysql存储过程: match the column rule to retrieve value

mysql - 从行中为每个外键选择最大数据

c# - 使用数据库的观察者设计模式

sql - 连接两个表时如何删除一个连接键

mysql - 这个 SQL 语法有什么错误?

MySQL自动递增列

sql - 有没有办法通过 SQL (MySQL) 获取第一个事件位?

mysql - 使用联接时如何为 mysql 中的 avg 聚合函数选择不同的行?

SQL - 将时间设置为明天上午 8 点

sql - 在不同组中的数据类型之间进行比较时,如何处理潜在的数据丢失