首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

习题中有部分SQL语句写出来了,但是不知道是否正确,还有部分没有写出来,请大家指点上

2012-12-26 
习题中有部分SQL语句写出来了,但是不知道是否正确,还有部分没有写出来,请大家指点下。已知关系模式:S (SNO,

习题中有部分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语句正确吗?

至少第1个有问题,一般用LEFT JOIN + WHERE IS NULL来判断

热点排行