2 Natural Join 可以返回的最大数
Maximum number that can be returned by 2 Natural Joins
给定关系 A(a,b,c), B(e,f), C(d,g,h),其中 A 有 800 个元组,B 有 200 个,c 有 500 个。在最坏的情况下给出表达式A * B * C(带*自然连接):
a) 800 tuples
b) 200 tuples
c) 500 tuples
d) 800*200*500 tuples
e) 800+200+500 tuples
f) Nothing from the above.
我的猜测是 800+200+500 因为没有任何共同的属性?如果有一个共同的属性呢?
我认为你的意思是 cross join
而不是 natural join
,因为你说三个 table 没有共同的列。
在这种情况下,您将得到三个 table 的笛卡尔积,即 table 中所有可能的行组合:这给您 800 * 200 * 500 行在结果集中。
另一方面,如果 table 之间存在 1-1 关系(也就是说,每个 table 中的 0 或 1 行可以在另一个 tables),并且您将 tables 与 inner join
s 组合,那么您将获得三个 tables 中确实存在的行子集:最多 200 行(如果没有元组可以在三个 table 中匹配,则可能是 0 行)。但是,这不是您的问题所指的内容。
如果您正在处理其他类型的关系(一对多、多对多等),则没有通用的答案。它确实取决于关系和数据。
没有共同行的 tables 上的自然连接实际上是交叉连接,正如您所猜想的那样。你会得到 A * B * C = 800 * 200 * 500 = 80,000,000 行。
一旦 table 有共同的列,就会进行过滤。根据是否有匹配项以及匹配项的数量,您会得到从 0 到 80,000,000 行的任何内容。示例:
- 如果所有 table 有一个共同的列,并且它的值在每个 table 的每一行中都相同,那么您将再次得到所有组合。
- 如果所有table有一个共同的列并且它的值在tableA中的所有行中都是'A',在[=26中的所有行中是'B' =] 'B' 和 'C' 在 table C 的所有行中,你最终没有匹配项,即零行。
毕竟,这一切都是枯燥的理论,因为头脑正常的人不会使用自然连接 :-)
关系A包含800个不同的元组,关系B包含200个不同的元组,关系C包含500个不同的元组。在自然连接中,它将 return B 的 200 个不同值与 A 和 C 的值匹配的记录,因此元组的最大数量将为 200
给定关系 A(a,b,c), B(e,f), C(d,g,h),其中 A 有 800 个元组,B 有 200 个,c 有 500 个。在最坏的情况下给出表达式A * B * C(带*自然连接):
a) 800 tuples
b) 200 tuples
c) 500 tuples
d) 800*200*500 tuples
e) 800+200+500 tuples
f) Nothing from the above.
我的猜测是 800+200+500 因为没有任何共同的属性?如果有一个共同的属性呢?
我认为你的意思是 cross join
而不是 natural join
,因为你说三个 table 没有共同的列。
在这种情况下,您将得到三个 table 的笛卡尔积,即 table 中所有可能的行组合:这给您 800 * 200 * 500 行在结果集中。
另一方面,如果 table 之间存在 1-1 关系(也就是说,每个 table 中的 0 或 1 行可以在另一个 tables),并且您将 tables 与 inner join
s 组合,那么您将获得三个 tables 中确实存在的行子集:最多 200 行(如果没有元组可以在三个 table 中匹配,则可能是 0 行)。但是,这不是您的问题所指的内容。
如果您正在处理其他类型的关系(一对多、多对多等),则没有通用的答案。它确实取决于关系和数据。
没有共同行的 tables 上的自然连接实际上是交叉连接,正如您所猜想的那样。你会得到 A * B * C = 800 * 200 * 500 = 80,000,000 行。
一旦 table 有共同的列,就会进行过滤。根据是否有匹配项以及匹配项的数量,您会得到从 0 到 80,000,000 行的任何内容。示例:
- 如果所有 table 有一个共同的列,并且它的值在每个 table 的每一行中都相同,那么您将再次得到所有组合。
- 如果所有table有一个共同的列并且它的值在tableA中的所有行中都是'A',在[=26中的所有行中是'B' =] 'B' 和 'C' 在 table C 的所有行中,你最终没有匹配项,即零行。
毕竟,这一切都是枯燥的理论,因为头脑正常的人不会使用自然连接 :-)
关系A包含800个不同的元组,关系B包含200个不同的元组,关系C包含500个不同的元组。在自然连接中,它将 return B 的 200 个不同值与 A 和 C 的值匹配的记录,因此元组的最大数量将为 200