下面的图像可以通过在互联网上搜索SQL连接找到:
我们可以通过以下方式将其解释为Venn diagram吗?
所示的图以各种形式广泛地出现在网络上,看起来非常像维恩图。因此,第一个直觉是将其视为维恩图。但是,尝试定义集合“表A”和“表B”的内容可能会陷入困境。
[Internet上也有一些似乎有冲突的信息。这个问题希望有助于解决一些冲突。一些网站认为我们不应该使用维恩图来解释联接:
虽然还有其他信息在表A和B之间使用维恩图来解释这些表上的联接,例如
没有如果该图表示联接,则不能将其解释为维恩图。让我们用一个反例来说明为什么。让我们选择一个最小的反例以避免混乱。因此,我们假设两个表都只有一列:ID
。此外,我们假设两个表中都只有两个记录,并且它们都具有相同的两个记录:只有ID 1和2。所以两个表都看起来像这样:
现在,假设我们运行以下SQL:
select * from A join B
由于没有ON
子句,我们将取回A
中所有记录组合和B
中所有记录的表。由于每个记录都有2条记录,因此我们将取回4 = 2 * 2
条记录。从选择中得到的结果表将如下所示,其中A和B的ID列完全由表名限定:
但是,无论我们为记录选择哪种解释,维恩图中描绘的两组记录的交集都不等于此。
解释#1:每条记录只是值的元组。在这种情况下,由于每个表中只有一列,因此元组可以简化为单个值。由于我们的ID列是数字,因此这种解释可以归结为仅是数字ID的记录。集合的交集是集合{1, 2}
与自身的交集。这只是原始设置。或作为表格,交点为:
解释#2:表A中的每个记录与表B中的任何记录或表A本身中的任何其他记录完全不同。在这种情况下,由于没有两个记录是同一件事,因此两个集合的交集将为空,即空集合。因此,作为表,它肯定不会与联接的结果相同。
此结论证明,不能将对Venn图的这种精确解释视为代表SQL连接。