📜  门| GATE-CS-2006 |第68章

📅  最后修改于: 2021-07-02 14:59:57             🧑  作者: Mango

考虑关系“已注册(学生,课程)”(其中,(学生,课程)是主键)和关系“已付费(学生,金额)”,其中学生是主键。假定没有空值,也没有外键或完整性约束。给出以下四个查询:

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)是正确的。
这个问题的测验