日期:2014-05-17  浏览次数:20481 次

等考的一道题求解答
数据库中有学生表Student(Sno,Sname,Ssex,Sage,Sdept)各属性分别表示为学号,姓名,性别,年龄,所在系;学生选课表SC(Sno,Cno,Grade),各属性分别表示为学号,课程号以及成绩;课程表Course(Cno,Cname,Cpno,Ccredit)各属性为课程号,课程名,先行课,学分。(先行课的意思是,比如课程号1有先行课5,说明要选课程1,就必须先选课程5)。用以上各表完成查询选修了全部课程的学生的姓名的语句补充

哪位大侠给我解释解释答案 越详细越好多谢了!关于exists真假判断小弟一直理解的不透彻
select * from student where not exists(
select * from course where not exists (select * from sc
where sc.s=student.s and c=course.c))
------最佳解决方案--------------------
select* from Student where sno 
  in(select sno from sc group by sno 
              having count(*)=(select count(distinct Cno) from Course))
------其他解决方案--------------------
查询选修了全部课程的学生的姓名的语句

这个你可以转换一下思路来解释,把肯定句转换成双重否定。也就是不存在一门课程该学生部选修,这样就好理解了额