单选题 设学生选课关系模式为SC(Sno, Cno, 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));
【正确答案】 B
【答案解析】 此题考查的是关系代数方面的知识。 通过分析可知SQL语句实现的功能检索至少选修了学生“1042”选修的全部课程的学生号码。因为在SELECT查询中,没有逻辑蕴含,但可以利用谓词演算将一个逻辑蕴含的谓词等价地转换,其形式为;p→q≡p∨q。本查询可以看成查询学号为x的学生,对所有的课程y只要1042学生选修了课程y,则x也选修了y。形式化表示如下: 用p表示谓词“学生1042选修了课程y” 用q表示谓词“学生x也选修了y” 则此查询可表示为任给一门1042选修的课程y,学生x也选修了,其形式如下: p→q(使用逻辑蕴含),其SQL语句的实现方法如下: 将上式转换为: 通过等价代换,意为:不存在这样的课程y,学生1042选修了y,而学生x没有选,故用SQL表示如下: SELECT Sno FROM SC SCX WHERE NOTEXISTS (SELECT * FROM SC SCY WHERE SCY.Sno='1042' AND NOTEXISTS (SELECT * FROM3CSCZ WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno)); 在本例中,要求写出与SELECT查询等价的元组演算表达式。首先要在SC关系中存在一个学生X,故需要一个元组变量u(存在量词)等价于SCX;然后在SC关系中找学号二‘1042’所选的任意一门课程,故需设置一个元组变量v(全程量词)等价于 SCY,最后,在SC表中只要'1042'所选的任意一门课程X学生是否也选了(即能找到x学生选了),故需设置一个元组变量w(存在量词)。 试题(13)的选项A是错误的,因为意为只要学生X选了1042学生所选的一门课条件为真;选项B是正确的,因为意为只要学生X选了1042学生所选的任意一门课;选项C是错误的,因为意为任给一个学生选了1042学生所选的一门课;选项D是错误的,因为意为任给一个学生选了1042学生所选的任意一门课。 试题(14)的选项A是正确的,因为意为只要1042学生所选的一门课必然蕴涵学生X选了。
【正确答案】 A
【答案解析】