问题 单项选择题

设学生选课关系模式为SC(Sno,(2no,Grade),其中,Sno为学号,Cno为课程号,Grade为成绩,SQL查询语句如下:
SELECT Sno
FROM SC SCX
WHERE NOT EXISTS
( SELECT *
FROM SC SCY
WHERE SCY.Sno=’1042’ AND NOT EXISTS
( SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));
与该查询等价的元组演算表达式为tl (38) (SC(u)∧SC(v)∧ (39) ∧t[1]=u[1]))。


答案

参考答案:A

解析:[要点解析] 这是一题要求读者掌握关系代数知识的综合分析题。根据试题中给出的SQL语句可知,该SQL语句实现的功能是:查询至少选修了学生“1042”选修的全部课程的学生号码。因为在SELECT查询中,没有逻辑蕴含,但可以利用谓词演算将一个逻辑蕴含的谓词等价地转换,其形式为:[*]。
查询学号为X的学生,对所有的课程Y,只要1042学生选修了课程Y,则X也选修了Y。如果用p表示谓词“学生1042选修了课程Y”,用q表示谓词“学生x也选修了Y”,则该查询可表示为:任给一门1042选修的课程Y,学生X也选修了,其形式化表示为:[*](使用逻辑蕴含)。
若使用双重否定:“不存在这样的课程Y,学生1042选修了Y,而学生x没有选修”,则式“[*]”可转换为:[*]。其相应的SQL查询语句表示如下。
SELECT Sno
FROM SC SCX
WHERE NOT EXISTS
( SELECT *
FROM SC SCY
WHERE SCY.Sno=’1042’ AND NOT EXISTS
( SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno));
在本试题中,要求写出与SELECT查询等价的元组演算表达式。其解答步骤如下:
(1)要在SC关系中存在一个学生X,故需要一个元组变量u(存在量词)等价于SCX;
(2)要在SC关系中找学号=’1042’所选的任意一门课程,故需设置一个元组变量v(全程量词)等价于SCY;
③要在SC表中只要1042所选的任意一门课程X学生是否也选修了(即能找到X学生选修了相关课程),故需设置一个元组变量w(存在量词)。
对于(1)空缺处的选项A“[*]”,意为只要学生X选了1042学生所选的一门课条件为真,因此选项A是错误的;选项B是正确的答案,因为“[*]”意为只要学生x选了1042学生所选的任意一门课条件为真;由于“[*]”意为任给一个学生选了1042学生所选的一门课条件为真,因此选项C是错误的;选项D是错误的,因为“[*]”意为任给一个学生选了1042学生所选的任意一门课条件为真。
试题中所给出的元组表达式中,t和u代表SCX中的元组,v代表SCY中的元组,w代表SCZ中的元组。(2)空缺处的选项A“[*]”,意为只要1042学生所选的一门课必然蕴涵学生X选了,因此选项A是正确的答案。

选择题
判断题