使用维恩图描述表所在的SQL连接是否合适?

问题描述 投票:1回答:1

下面的图像可以通过在互联网上搜索SQL连接找到:

enter image description here

我们可以通过以下方式将其解释为Venn diagram吗?

  • 标记为表A的圆圈是表A中的记录集
  • 标记为表B的圆圈是表B中的记录集
  • 集合的交集表示内部联接(也就是SQL中的联接)

动机

所示的图以各种形式广泛地出现在网络上,看起来非常像维恩图。因此,第一个直觉是将其视为维恩图。但是,尝试定义集合“表A”和“表B”的内容可能会陷入困境。

[Internet上也有一些似乎有冲突的信息。这个问题希望有助于解决一些冲突。一些网站认为我们不应该使用维恩图来解释联接:

虽然还有其他信息在表A和B之间使用维恩图来解释这些表上的联接,例如

sql join inner-join outer-join
1个回答
1
投票

没有如果该图表示联接,则不能将其解释为维恩图。让我们用一个反例来说明为什么。让我们选择一个最小的反例以避免混乱。因此,我们假设两个表都只有一列:ID。此外,我们假设两个表中都只有两个记录,并且它们都具有相同的两个记录:只有ID 1和2。所以两个表都看起来像这样:

enter image description here

现在,假设我们运行以下SQL:

select * from A join B

由于没有ON子句,我们将取回A中所有记录组合和B中所有记录的表。由于每个记录都有2条记录,因此我们将取回4 = 2 * 2条记录。从选择中得到的结果表将如下所示,其中A和B的ID列完全由表名限定:

enter image description here

但是,无论我们为记录选择哪种解释,维恩图中描绘的两组记录的交集都不等于此。

解释#1:每条记录只是值的元组。在这种情况下,由于每个表中只有一列,因此元组可以简化为单个值。由于我们的ID列是数字,因此这种解释可以归结为仅是数字ID的记录。集合的交集是集合{1, 2}与自身的交集。这只是原始设置。或作为表格,交点为:

enter image description here

解释#2:表A中的每个记录与表B中的任何记录或表A本身中的任何其他记录完全不同。在这种情况下,由于没有两个记录是同一件事,因此两个集合的交集将为空,即空集合。因此,作为表,它肯定不会与联接的结果相同。

此结论证明,不能将对Venn图的这种精确解释视为代表SQL连接。

© www.soinside.com 2019 - 2024. All rights reserved.