有以下三张表:分别是课程表c,有课程号cno,课程名cname,课程类别cpro等
学生信息表s,学号sno,姓名sname,性别ssex,年龄sage,班级sclass,籍贯jg
成绩表sc,学号sno,课程号cno,成绩score。
1.查询同时选修了c04和c05的同学的学号。
我们在成绩表sc中可以发现,选修了c04课程的有060101,060102,070103,070301四人,选修了c05课程的有060101一人。所以同时选修了c04和c05课程的人只有060101。
通过sql语句查询,
(1).嵌套查询,先查出选修了c05课程的人,再在选修了c05课程的人中查询选修c04的人:select sno from sc where cno='c04' and sno in(select sno from sc where cno='c05');
只需要映射学号一列,select sno。来自表sc,form sc。 查询课程号为c04,并且学号为来自选修了c05的学号。sno in(查出的结果是选修了c05课程的学号)。选中,右击运行已选择的
(2).临时修改表名查询,sc分别临时修改为两张表a和b,连接查询,join on。
from sc a join sc b分别修改成两个命令a,b连接两个表的学号a.sno=b.sno。来自每张表的cno=c04和cno=c05,映射出a的学号a.sno
select a.sno from sc a join sc b on a.sno=b.sno where a.cno='c04' and b.cno='c05'; 如图
2.统计选课人数超过3人的课程的课程号(cno)和选课人数(sno),分组(group by),统计学号大于3个人的
分析:选课人数超过3人,有c01课程和c04课程都超过了3人,要映射出他们的课程号和人数
语句:select cno 课程号,count(sno) 选课人数 from sc group by cno having count(sno)>3;
要查出课程号和课程人数,即cno,sno,改个名字cno 课程号,sno 选课人数
在成绩表中,对课程分组,统计出分组后的学号个数大于3人的,如c01为1组,在c01中有060101,060102,070101,070301,统计学号的个数发现是4,满足赛选。反例:在c02课程组中,只有070101,080101两人,不满足count(sno)>3。如图:
----------end--------------