当你的精神参考是Excel的查找时如何理解联接?

当我刚刚接触SQL ,我做了一些真正的激烈思考,以understand how SQL joins work 。 在某个时候,我意识到,多年prior experience with -or say, exposure to, MS Excel's ,让我的思维和理解错误。 虽然网上有很多很好的参考资料,但是没有find我。 Venn diagrams也起初并没有帮助我。 我张贴这个问题,希望别人不会像我一样陷入同样的​​精神陷阱。 我也会给出答案。 其他build议当然也非常受欢迎。 虽然花费了我一些时间来写这篇文章,但是如果我没有发表这篇文章,

当我开始使用SQL和连接时,我不明白为什么,例如,SQL的左连接给了我更多的结果,而不是我所期望的。 维恩图并没有帮助我,但现在我发现他们非常清楚。

经过一个星期的激烈的激烈思考,我突然意识到,我以前的经历已经使我想起了:在basic formula of vlookupbasic formula of vlookuponly one result is given back 。 在basic expression of a left joinbasic expression of a left join ,返回zero or more results are given back

我会尽力澄清。 例如,我有一个Excel工作表中的数据和公式(在D列)。 列标题在第一行,所以这就是为什么公式说A2等等。为了简单起见,我有列A中靠近B和C的数据,实际上最好是在别的地方,因为你可以将数据集解释为每行都是logging的表格。 在这个例子中情况并非如此。 换句话说:单元格A3(2)与B3到C3(1,蓝色)的logging不同。 对于那些阅读这篇文章的人,我假设他们理解公式和“假”条款,否则从这里开始。

 ABCD (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栏中,您会看到只有“绿色”才会显示。 一个join会回馈“绿色”和“蓝色”。

请参阅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 

你看到,绿色和蓝色都得到了结果。 这是因为joinsearch所有结果。 另见B = 4不返回,那是因为它是从TableBC开始的左连接。 如果从TableA开始,那么表中有4个事实是IS,则会返回一个空结果。 喜欢这个:

 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连接的区别

SQLjoin的可视化解释

Interesting Posts