1

当我是新手时SQL,我做了一些真正激烈的思考understand how SQL joins work。在某个时刻,我意识到,多年以来prior experience with -or say, exposure to, MS Excel's vlookup,我的想法和理解是错误的。虽然网上有很多很好的参考资料,但我没有得到。Venn diagrams起初也没有帮助我。我发布了这个问题,希望其他人不会像我一样陷入同样的​​心理陷阱。我也会给出答案。当然也非常欢迎其他建议。虽然我花了一些时间来写这篇文章,但如果我不发布这个我就无法忍受自己......

4

1 回答 1

0

当我开始使用 SQL 和联接时,我只是不明白为什么,例如,SQL 的左联接给我的结果比我在进行 vlookup 时所期望的要多。维恩图对我没有帮助,尽管我现在发现它们非常清晰。

经过一周真正激烈的激烈思考后,我突然意识到我之前的经历已经成为了我的典范:在basic formula of vlookup, only one result is given back. 在basic expression of a left join, zero or more results are given back.

我会尽力澄清。例如,我在 Excel 工作表中有下面的数据和公式(在 D 列中)。列标题在第一行,所以这就是公式说明 A2 等的原因。为了简单起见,我在 B 和 C 附近的 A 列中有数据,实际上最好将它放在其他地方,因为你可以将数据集解释为每行都是记录的表。在本例中并非如此。换句话说:单元格 A3 (2) 与 B3 到 C3 (1, Blue) 的记录不同。对于那些阅读本文的人,我假设他们理解公式以及“错误”子句,否则从这里开始。

A    B    C        D                                (result in D) 
1    1    Green    =vlookup(A2,B:C;2;false)        (result=Green)
2    1    Blue     =vlookup(A3,B:C;2;false)        (result=Orange)
3    2    Orange   =vlookup(A4,B:C;2;false)        (result=Yellow)
4    3    Yellow   =vlookup(A5,B:C;2;false)        (result=#n/a)

在 D2 列中,您会看到结果只给出了“绿色”。加入会返回“绿色”和“蓝色”。

请参阅下面的 SQL 查询(方言是 t-sql)和结果。

select A as AFromTableA
,B as BFromTableBC
,C as CFromTableBC
from tableBC left outer join tableA
on B=A;

结果:

AFromTableA BFromTableBC    CFromTableBC
1           1               Green
1           1               Blue
2           2               Orange
3           3               Yellow

您会看到绿色和蓝色都在结果中返回。那是因为 join 搜索所有结果。还要看到 B=4 没有返回,那是因为它是从 TableBC 开始的左连接。如果它从表 A 开始,实际上表中是 4,​​则返回空结果。像这样:

AFromTableA BFromTableBC    CFromTableBC
1           1               Green
1           1               Blue
2           2               Orange
3           3               Yellow
4           NULL            NULL

以下是一些自己编写的脚本:

create table tableA (A int)
create table tableBC (B int, C nvarchar(10))

insert into tableA
values (1),(2),(3),(4);

insert into tableBC (B,C)
values (1, 'Green')
,(1, 'Blue')
,(2,'Orange')
,(3, 'Yellow');

所以,希望这个答案能帮助你思考。现在阅读一些关于连接的更多澄清信息:

INNER 和 OUTER 连接的区别

SQL 连接的可视化解释

于 2015-09-09T08:23:07.360 回答