联接(内,外,左,右)表时可能会有什么结果?

时间:2018-09-21 17:42:55

标签: mysql sql

表A有10条记录,表B有100行。 A和B之间的关系是1:N。加入表格可能会产生什么结果?可能的答案是

  1. 100行,使用A INNER JOIN B
  2. 使用A LEFT JOIN B的10条记录
  3. 使用A RIGHT JOIN B的10条记录
  4. 使用A FULL OUTER JOIN B的10条记录
  5. 使用A FULL OUTER JOIN B的100条记录
  6. 最小输出行数为10
  7. 最大输出行数为1000

作为使用我对矩阵知识的数学家,答案似乎可能是a),但我不太确定,任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

好的,我将忽略该句子:

  

A和B之间的关系是1:N

因为我不太了解那是什么意思。这是我的看法:

VideoPlayerRenderer

答案 1 :(得分:0)

一对多思考的最简单方法是一本书中的页面。因此,假设表A是书籍[书籍1],[书籍2],...,[书籍10]的列表,而表B是这些书籍中不同文本页面的列表,例如[书籍1 | [第1本书第1页的文字],[第2本书| [第2本书第1页的文字],[第2本书| [第2书第2页上的文本]。我们将保持表A不变,并改变表B。

例如,如果表B包含表A中每本书的前10页文字,并且每页都在其自己的行中,则

[1]和[5]是可能的。

[2]是可能的,例如,表B包含表A中每本书的第一页文本和书11中的前90页文本(不在表A中)。

[3]和[4]将不可能,因为结果表必须至少为表B的大小。

[6]取决于联接操作。例如,对于内部联接,如果没有记录匹配(例如,表B从书11的页面开始并从书11的页面开始),则输出可能为0。

如果参数p为1,则

[7]不可能。如果将表A中的每一行与表B中的每个元素连接在一起,则可能有1000条记录,但这需要表B的一行与表1中的多行连接(很多对很多)。

答案 2 :(得分:0)

Impaler为您提供了可以导致联接的正确行数。

我想根据1:N关系给我5分。

我们知道部门和员工之间的这种关系。一个部门可以有很多员工;一名员工只能在一个部门工作。

也许,也许,提出问题的人已经想到了外键。在上面的示例中,这将是一些部门ID。对于表B(员工)中的每条记录,我们都会在表A(部门)中找到一条记录。对于每个部门,我们可能会找到多个员工。但是然后,1:N只是1:{0,n}或1:{1,n)的缩写。

  • 1:{0,n}意味着一个部门可以有零到许多员工
  • 1:{1,n)表示一个部门可以有一对多的员工

联接不一定在外键上。是的,我们可以说:列出所有员工及其部门(因此加入部门ID,即外键)。但是我们也可以说给我看所有主要技能与某个部门所需的主要技能相匹配的员工,并给出全部1000种组合(每个员工都可以在每个部门工作)或没有(所有员工实际上都没有在任何部门工作的技能) )。

因此,无论访问员是否提到了1:N关系以考虑连接外键,这都产生了很大的差异。

在我们总是只联接外键(在我的示例中为部门ID)的情况下:

  1. 使用A INNER JOIN B的100行-是的,我们将得到100行,即100名员工,每个人及其部门。
  2. 使用A LEFT JOIN B的10条记录-不,与内部联接一样,我们至少将获得100行。如果1:N表示1:{0,n},我们可能也会得到没有员工的部门。
  3. 使用A RIGHT JOIN B的10条记录-不,我们将获得与内部联接相同的100行
  4. 使用A FULL OUTER JOIN B进行10条记录-不,我们将获得与A LEFT JOIN B相同的100条或更多行
  5. 100条记录,使用A FULL OUTER JOIN B-可以。我们将获得与A LEFT JOIN B相同的100行或更多行。因此100行是可能的,但不能保证。
  6. 输出行的最小数量为10-不,我们将获得100到109行(如果所有部门都有员工,则为100;如果只有一个部门拥有员工,则为109)。再一次的问题是1:N到底是什么意思。
  7. 输出行的最大数量为1000-否,在外键上进行内部和外部联接时,我们将获得100至109行。