是否有一种特殊的SQL连接情况,其中Venn图是有意义的?

是否有一种特殊的SQL连接情况,其中Venn图是有意义的?,sql,join,inner-join,venn-diagram,Sql,Join,Inner Join,Venn Diagram,在一个相关的问题中,以下图像通常不适合根据表a和表B描述内部连接,并将其解释为维恩图 然而,我的直觉仍然告诉我,这幅图有些道理,尽管它在一般情况下并不正式正确。那么,我问,是否有一种特殊的内部连接的情况,以及对下图的解释,或者一些相近的东西,使得图表有意义 是的,至少有一种特殊情况,但可能有更多的连接和一个密切相关的维恩图,该图显示了连接特殊情况的特征。尽管这是一个特例,从数学意义上讲,它实际上是现实世界中非常常见的用例,实际上几乎是join的标准用例。因此,它值得关注 我们考虑的特殊情况有以下

在一个相关的问题中,以下图像通常不适合根据表a和表B描述内部连接,并将其解释为维恩图

然而,我的直觉仍然告诉我,这幅图有些道理,尽管它在一般情况下并不正式正确。那么,我问,是否有一种特殊的内部连接的情况,以及对下图的解释,或者一些相近的东西,使得图表有意义


是的,至少有一种特殊情况,但可能有更多的连接和一个密切相关的维恩图,该图显示了连接特殊情况的特征。尽管这是一个特例,从数学意义上讲,它实际上是现实世界中非常常见的用例,实际上几乎是join的标准用例。因此,它值得关注

我们考虑的特殊情况有以下限制:

正在联接的两个表都有唯一的键。让我们称他们为IDa和IDb ON条件为IDa=IDb 在本例中,我们可以定义两个集合SetA和SetB,它们是IDa和IDb列中所有ID的集合。因此,由于两个集合的类型相同,因此它们可以有一个非空的交点。交叉点中的每个ID都将在生成的联接表中定义一条记录。由于ID位于两个集合的交叉点,并且ID是唯一的,因此它将对应于每个表中的一条记录。因此,对于该ID,结果表中的记录将是表A中的记录和表B中的记录的列到值映射的联合

实例 下图显示了满足特殊情况的两个表TableA和TableB,以及联接的结果:

联接的确切SQL为:

SELECT * FROM TableA JOIN TableB ON TableA.ID = TableB.ID
ID集分别为1、2、3和1、2、4。所以交点是1,2。因此,我们从两个表中选择ID为1和2的行,并将它们放在一起以获得结果表中的行。这些集合及其交点的维恩图表示为:

教学笔记
尽管在现实世界中,在一个唯一ID上连接是一个非常常见的用例,但必须理解Venn图在一般情况下解释连接的局限性。只要您理解这一点,在理解这种特殊情况时应用维恩图是没有害处的。

因为这张图片描述的是相交运算符——它只会碰巧与任何联接相关——它不是任何联接类型的合适图片。@GordonLinoff是的,上面的图片是错误的,当我们将左边的集合解释为A中的记录集合,将右边的集合解释为B中的记录集合时。但是如果我们限制为特殊的连接情况,并且我们将集合的定义更改为非记录而是唯一ID,那么Venn图是准确的。这就是我的答案。不过,从教学角度来看,恐怕这个特例是当今网络上所有关于连接的困惑的核心。他们真的没什么关系。内部联接的结果集不包含同时位于A和B中的记录。intersect就是这样做的。事实上,一个连接可以产生多行,产生的结果集大于a和B的总和。@GordonLinoff我想我们是站在同一边的。我99%反对使用维恩图来解释连接,因为正如您正确指出的那样,它们没有描述一般情况。这个问题只不过是我在扮演魔鬼代言人的角色,试图了解当人们滥用上述维恩图时,他们来自何方。我想我的回答说明了这一点。他们并不是真的在桌子上做维恩图。他们在唯一的ID上进行,并假设on条件是一对一。请仔细阅读我的答案,了解全部细节。