文档详情

数据库语言SQL作业解答.doc

发布:2017-03-31约4.46千字共7页下载文档
文本预览下载声明
SQL语言习题 1. 关系数据模型如下: 学生S(SNO,SN,SEX,AGE) 课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序: 选修课程“DB”的学生姓名SN。 方法1. SELECT SN FROM S WHERE SNO IN ( SELECT SNO FROM SC WHERE CNO IN ( SELECT CNO /* = */ FROM C WHERE CN = ‘DB’ ) ); 方法2. SELECT SN FROM S, SC, C WHERE S.SN=SC.SNO AND SC.CNO=C.CNO AND CN = “DB”; 2. 关系数据模型如下: 学生S(SNO,SN,SEX,AGE) 课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序: 查询课程名和它的直接先行课的课程名以及它的间接先行课的课程名。 SELECT CN, CX.CN, CY.CN FROM C,C CX,C CY WHERE C.PCNO=CX.CNO AND CX.PCNO=CY.CNO [例41]找出每个学生超过他选修课程平均成绩的课程号。 SELECT Sno,Cno FROM SC x WHERE Grade = ( SELECT AVG(Grade) FROM SC y WHERE y.Sno=x.Sno ); 3. 关系数据模型如下 P84 例4.26 学生S(SNO,SN,SEX,AGE) 课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序: 所有学生都选修的课程名CN。 方法1. SELECT CN FROM C WHERE NOT EXISTS ( SELECT * FROM S WHERE NOT EXISTS ( SELECT * FROM SC WHERE SNO=S.SNO AND CNO=C.CNO); 变换后语义:不存在这样的学生x,该学生没有选修P。 方法2. SELECT CN FROM C WHERE CNO IN ( SELECT CNO FROM SC GROUP BY CNO HAVING COUNT(*) = ( SELECT COUNT(*) FROM S )); [例46] 查询选修了全部课程的学生姓名。 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno= Student.Sno AND Cno= Course.Cno ) ); x,该学生没有选修P。 4. 假设学生一课程数据库关系模式如下: Student(Sno,Sn
显示全部
相似文档