以下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%';
它们以何种方式产生相同的结果。
我的意思是第一个查询等价,例如的:
- 从员工中选择 * 并使用 where 进行过滤
- 左加入吗?
第一个查询的步骤是什么使它与内连接相同?
最佳答案
对于不符合外连接条件的行,连接表中任意一列的值为NULL。 Where 子句发生在(概念上) 连接被处理之后,因此测试这些列的任何条件都将为假(或者,严格来说,为 NULL)。
如果您想要包含一个表中的所有行,但只匹配第二个表中满足条件的行,则必须将该条件添加到 Outer Join 的 ON 子句中。
另外请注意,由于内部联接会丢弃不匹配的行,因此内部联接的 ON 子句中的条件与 Where 子句中的条件具有相同的效果。
关于mysql - 如果使用 where 子句,外连接给出与内连接相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14909706/