当您的心理参考是Excel的vlookup时,如何理解联接?

时间:2015-09-09 08:19:17

标签: sql excel join vlookup venn-diagram

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

1 个答案:

答案 0 :(得分:0)

当我开始使用SQL并加入时,我只是无法理解为什么,例如,SQL的左连接给了我比我预期的更多结果。维恩图没有帮助我,虽然我现在发现他们非常澄清。

经过一周真正强烈的激烈思考后,我突然意识到我之前的经历已经模范了我:basic formula of vlookuponly one result is given back。在basic expression of a left joinzero or more results are given back

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

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

您会看到结果中都会返回绿色和蓝色。这是因为联接搜索所有结果。还看到B = 4不返回,这是因为它是从TableBC开始的左连接。如果它从TableA开始,其中4表示事实上IS在表中,则返回null结果。像这样:

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');

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

Difference between INNER and OUTER joins

A Visual Explanation of SQL Joins