这可能不是最合适的交换,所以我提前道歉。
在 SQL 开发人员角色的面试准备会议期间,我被提出了这个问题,但没有得到解决方案。问题如下:
给定 2 个表(Table A
和Table B
),它们分别具有相同的主键和大小(行)N
,M
是否可以使用以下方法计算结果表/数据集的大小:
Inner Join
Left Join
Full Join
我真的被这个问题难住了,正如我所说的那样,我没有得到解决方案。我的一部分认为,甚至可能没有固定的解决方案。如果有人有任何指示或解决方案,我很想听听。
如果“使用相同的主键”意味着“自动增量以相同的值 (1) 开始,没有间隙”,并且如果连接表达式是这些 PK 相等,那么答案是:
LEAST(m,n)
内部连接将过滤两个表中都存在的值的记录。
n
左连接将
tableA
独立于tableB
内容返回所有记录。所以tableB
内容不能影响结果。GREATEST(m,n)
全外连接将返回至少存在于一个表中的值的记录。
小提琴
一般来说,A 和 B 之间连接的基数:
假设例如:
并且 JOIN 在 Aa 和 Bb 之间完成,JOIN 的基数是 2x3=6。
如果我们假设我们使用键来连接表,我们知道 A 中的每一行将最多匹配 B 中的一行,所以基数是:
如果我们使用键作为 JOIN 谓词并使用 LEFT JOIN,则基数为:
A 的每一行都将在结果集中,B 中最多有 1 行匹配。
FULL JOIN 是 LEFT 和 RIGHT JOIN 之间的 UNION。如果没有匹配的行并且我们使用键来加入:
另一方面,如果存在最大匹配: