SQL允许在关系中使用元组,并在联接结果中相应地定义元组的多重性。以下哪个查询总是给出与以下所示的嵌套查询相同的答案:
select * from R where a in (select S.a from S)
(A)从R,S中选择R. *,其中Ra = Sa
(D)
(B)从R,S中选择不同的R. *,其中Ra = Sa
(C)从R中选择R. *,(从S中选择一个a)作为S1其中
Ra = S1.a
(D)从R,S中选择R. *,其中Ra = Sa并且是唯一R答案: (C)
说明:此问题的解决方案在于我们定义的关系R和S的数据集(元组)。如果我们错过某些情况,那么我们可能会得到错误的答案。
比方说
具有属性B,C和A的关系R(BCA)包含以下元组。
B C A
---------
7 2 1
7 2 1
8 9 5
8 9 5
具有属性A,M和N的关系S(AMN)包含以下元组。
A M N
---------
1 6 7
2 8 4
5 9 6
5 5 3
————————————————————————————————————
现在,原始查询将给出以下结果:
“从R中选择*,其中a为in(从S中选择Sa)” –查询要求显示在完整Sa中存在Ra的关系R的每个元组
B C A
---------
7 2 1
7 2 1
8 9 5
8 9 5
————————————————————————————————————
选项A查询将导致:
“从R,S中选择R. *,其中Ra = Sa”
B C A
---------
7 2 1
7 2 1
8 9 5
8 9 5
8 9 5
8 9 5
————————————————————————————————————
选项B查询将导致:
“从R,S中选择不同的R. *,其中Ra = Sa”
B C A
---------
7 2 1
8 9 5
————————————————————————————————————
选项C查询将导致:
“从R中选择R。*,(从S中选择一个a)作为S1,其中
Ra = S1.a”
BCA
———
7 2 1
7 2 1
8 9 5
8 9 5
————————————————————————————————————
选项D查询将导致:设置为NULL
“从R,S中选择R. *,其中Ra = Sa并且是唯一的R”
————————————————————————————————————
因此,选项C查询与原始结果集匹配。
注意:如前所述,我们应该采用那些可以向我们展示不同查询中的差异的数据集。假设在R中,如果不放置相同的元组,则会得到错误的答案。 (您自己尝试一下,这留给您练习)。这个问题的测验