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

📅  最后修改于: 2021-09-25 05:19:28             🧑  作者: Mango

考虑关系“enrolled(student, course)”,其中(student, course) 是主键,以及关系“paid(student, amount)”,其中student 是主键。假设没有空值,也没有外键或完整性约束。鉴于以下四个查询:

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 将在运行时遇到完整性违规的数据库。答案:(乙)
说明:举个例子:

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