SQL 允许关系中有元组,并相应地定义了连接结果中元组的多样性。以下哪个查询总是给出与下面显示的嵌套查询相同的答案:
select * from R where a in (select S.a from S)
(A)从 R, S 中选择 R.*,其中 Ra=Sa
(四)
(B)从 R,S 中选择不同的 R.*,其中 Ra=Sa
(C) select R.* from R,(select distinct a from S) as 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
—————————————————————————————————————————
现在,原始查询将给出结果:
“select * from R where a in (select Sa from S) ” – 查询要求显示关系 R 的每个元组,其中 Ra 存在于完整集合 Sa 中
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 查询将导致:
“select R.* from R,(select distinct a from S) as S1 where
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 中,如果您不放置相同的元组,那么您将得到错误的答案。 (你自己试试,这留给你作为练习)。这个问题的测验