主题:[讨论]SQL专题讨论
最近在做一个学生成绩管理系统,还是那四张表:
class(clno C(8),clname C(14),number N(2),monitor C(10))
这是班级表,分别有班号,班名,班级人数,班长学号字段;
student(sno C(10),sname C(12),ssex C(2),sage N(2),clno C(8))
这是学生表,分别有学号,姓名,性别,年龄,班号等字段;
course(cno C(2),cname C(24),precno C(2))
这是课程表,分别有课号,课名,先修课课号等字段;
grade(sno C(10),cno C(2),gmark N(5,1))
这是学生选课及成绩表,分别有学号,课号,成绩等字段。
要求写SQL查询语句,求出只选修了学生李勇所选全部课程的学生的学号及姓名,这个问题特复杂,我想了两周都没想出答案,后来经本坛多位高手指点,得狐说八道大力帮助,好容易把狐道的程序运行了,但没有结果(应该有),最后,还是自己在SQL server 2000的查询分析器中折腾了好几天,才折腾出如下句子,解决了问题,但在VFP中却没法运行,提示:"SQL:不能执行子查询",不知是何因?
select sno,sname from student s where not exists
(select cno from grade c where sno=(select sno from student where sname='李勇') and not exists
(select * from grade where sno = s.sno and cno=c.cno))
and (select count(*) from grade where sno = s.sno)=(select count(*) from grade where sno=(select sno from student where sname = '李勇'))
请高手指点迷津!
(本人愚笨,请给出具体的句子并做适当的解释)
class(clno C(8),clname C(14),number N(2),monitor C(10))
这是班级表,分别有班号,班名,班级人数,班长学号字段;
student(sno C(10),sname C(12),ssex C(2),sage N(2),clno C(8))
这是学生表,分别有学号,姓名,性别,年龄,班号等字段;
course(cno C(2),cname C(24),precno C(2))
这是课程表,分别有课号,课名,先修课课号等字段;
grade(sno C(10),cno C(2),gmark N(5,1))
这是学生选课及成绩表,分别有学号,课号,成绩等字段。
要求写SQL查询语句,求出只选修了学生李勇所选全部课程的学生的学号及姓名,这个问题特复杂,我想了两周都没想出答案,后来经本坛多位高手指点,得狐说八道大力帮助,好容易把狐道的程序运行了,但没有结果(应该有),最后,还是自己在SQL server 2000的查询分析器中折腾了好几天,才折腾出如下句子,解决了问题,但在VFP中却没法运行,提示:"SQL:不能执行子查询",不知是何因?
select sno,sname from student s where not exists
(select cno from grade c where sno=(select sno from student where sname='李勇') and not exists
(select * from grade where sno = s.sno and cno=c.cno))
and (select count(*) from grade where sno = s.sno)=(select count(*) from grade where sno=(select sno from student where sname = '李勇'))
请高手指点迷津!
(本人愚笨,请给出具体的句子并做适当的解释)