考虑关系“已注册(学生,课程)”(其中,(学生,课程)是主键)和关系“已付费(学生,金额)”,其中学生是主键。假定没有空值,也没有外键或完整性约束。给出以下四个查询:
Query1: select student from enrolled where
student in (select student from paid)
Query2: select student from paid where
student in (select student from enrolled)
Query3: select E.student from enrolled E, paid P
where E.student = P.student
Query4: select student from paid where exists
(select * from enrolled where enrolled.student
= paid.student)
下列哪种说法是正确的?
(A)所有查询针对任何数据库返回相同的行集
(B) Query2和Query4对所有数据库返回相同的行集,但存在Query1和Query2返回不同行集的数据库。
(C)存在一些数据库,其中Query3返回的行比Query2严格少
(D)存在一些数据库,Query4在运行时将遇到其完整性冲突。答案: (B)
说明:举个例子:
Table enrolled
student course
----------------
abc c1
xyz c1
abc c2
pqr c1
Table paid
student amount
-----------------
abc 20000
xyz 10000
rst 10000
Output of Query 1
abc
abc
xyz
Output of Query 2
abc
xyz
Output of Query 3
abc
xyz
Output of Query 4
abc
xyz
查询1和查询3可能返回重复的学生值,因为“学生”不是已注册关系中的关键字,但是查询2和查询4始终返回相同的行集。
因此,选项(B)是正确的。
这个问题的测验