以下连接是否相同?

时间:2011-12-20 15:30:57

标签: sql outer-join

我对左右连接运算符有点困惑。

select  *
from    <left table> lt
    left join <right table> rt on lt.pk = rt.fk

我总是对连接的“左”侧的确切位置感到困惑。 “左连接”关键字左侧的表格是“左表”,或者是左表中on子句左侧的表,如同左侧表中的左表。标志。我读过的文章表明它应该是

然而......现在考虑以下选择声明......

select  *
from    <some table> st
    inner join <left table> lt on st.pk = lt.fk
    left join <right table r on rt.fk = st.pk

在上面的代码位是左表?考虑到之前的定义,人们会假设因为模糊或不清晰(因为它实际上并没有直接留下)......我认为在on子句中指定“左表”会更有意义

所以我的每一点似乎都在与这种逻辑作斗争......我需要一点澄清......请和谢谢。

2 个答案:

答案 0 :(得分:2)

列出的第一个表是将返回所有行的表。以LEFT JOIN命名的表将仅返回与第一个表匹配的行,并将返回未找到匹配项的NULL值。

答案 1 :(得分:0)

一般情况下 - 不,因为你再引入一个过滤表st。 但 IF lt的每一行都有相应的唯一的行 - 是的,行数相同,列的集合会有所不同。但是第一个查询的结果集将是第二个查询的结果集的子集(仅与st表中的列不同)