首页 > 解决方案 > 加入(内、外、左、右)表时可能的结果是什么?

问题描述

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

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

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

标签: mysqlsql

解决方案


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

我想在 1:N 关系上给出我的 5c。

我们从部门和员工那里知道这种关系。一个部门可以有很多员工;一名员工只在一个部门工作。

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

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

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

因此,面试官是否提到考虑外键连接的1:N关系有很大的不同。

如果我们总是只加入外键(在我的例子中是部门 ID):

  1. 100 行,使用 A INNER JOIN B - 是的,我们将得到正好 100 行,即 100 名员工,每个员工都有自己的部门。
  2. 10 条记录,使用 A LEFT JOIN B - 不,我们将至少获得 100 行,就像使用内部连接一样。如果 1:N 表示 1:{0,n},我们也可能会得到没有员工的部门。
  3. 10 条记录,使用 A RIGHT JOIN B - 不,我们将获得与内部连接相同的 100 行
  4. 10 条记录,使用 A FULL OUTER JOIN B - 不,我们将获得与 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 行。

推荐阅读