当前位置: 代码迷 >> SQL >> 习题中有部分SQL语句写出来了,但是不知道是否正确,还有部分没有写出来,请大家指点下。该怎么解决
  详细解决方案

习题中有部分SQL语句写出来了,但是不知道是否正确,还有部分没有写出来,请大家指点下。该怎么解决

热度:548   发布时间:2016-05-05 15:34:41.0
习题中有部分SQL语句写出来了,但是不知道是否正确,还有部分没有写出来,请大家指点下。
已知关系模式:
S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名
C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师
SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩
要求实现如下5个处理:
  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
  2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
  3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
  4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
  5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
答案:1.select s.sname from s,c,sc where s.sno=sc.sno and sc.cno=c.cno and c.cteacher !='李明'
  2.
  3.select s.sname from s,sc where s.sno=sc.sno and sc.cno in('1','2')
  4.
  5.

------解决方案--------------------
1. 找出没有选修过“李明”老师讲授课程的所有学生姓名
 select sname from s where sno not in (select sno from SC ,C where SC.CNO=C.CNO and CTEACHER='李明)
 
 2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
 select SNAME,avg(SCGRADE)
 from S,SC
 where S.SNO=sc.sno
 and SNO in (select SNO from SC where SCGRADE<60 Group by SNO having count(*)>1)
 
 3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
 select SNAME
 from S,SC t1,SC t2
 where s.sno=t1.sno and s.sno=t2.sno
 and t1.CNO=1 and t2.CNO=2
 
 4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
 select sno
 from SC t1,SC t2
 where t1.sno=t2.sno
 and t1.CNO=1 and t2.CNO=2
 and t1.SCGRADE>t2.SCGRADE
 
 
 5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩
 select sno,t1.SCGRADE,t2.SCGRADE
 from SC t1,SC t2
 where t1.sno=t2.sno
 and t1.CNO=1 and t2.CNO=2
 and t1.SCGRADE>t2.SCGRADE
------解决方案--------------------
探讨
我写的那两条SQL语句正确吗?
  相关解决方案