数据库第五六七章作业答案ppt课件.ppt
第五章作业,1、查询学生选课表中的全部数据select * from sc2、查询计算机系学生的姓名、年龄select sname,sage from student where sdept=计算机系3、查询成绩在70-80的学生的学号、课程号和成绩select * from sc where grade between 70 to 804、查询计算机系年龄在18-20的男生的姓名、年龄select sname,sage from studentWhere sdept=计算机系 and sage between 18 to 20 and ssex=男5、查询“C01”课程的最高成绩Select max(grade) from sc where cno=c01,6、查询计算机系学生的最大年龄和最小年龄 select max(sage),min(sage) from student where sdept=计算机系7、统计每个系的学生人数 select sdept,count(*) from student group by sdept8、统计每门课程的选课人数和考试最高分 select cno,count(*),max(grade) from sc group by cno9、统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果 select sno,count(*),sum(grade) from sc group by sno order by count(*) asc10、查询总成绩超过200分的学生,要求列出学号、总成绩 select sno,sum(grade) from sc group by sno having sum(grade)200,11、查询选修了”C02“课程的学生的姓名和所在系 select sname,sdept from student s join sc on s.sno=sc.sno where sc.con=c0212、查询成绩80分以上的学生的姓名、选的课程号和成绩,并按成绩降序排列结果 select sname,cno,grade from student s join sc on s.sno=sc.sno where grade 80 order by grade desc13、查询哪些学生没有选课,要求列出学号、姓名和所在系 select s.sno,sname,sdept from student s left join sc on s.sno=sc.sno where o is null,14、查询与VB在同一学期开设的课程的课程名和开课学期 select ame,c1.semester from course c1 join course c2 on c1.semester=c2.semester where ame=VBand ame!=VB15、查询与李勇年龄相同的学生的姓名、所在系和年龄 select s2.sname,s2.sdept,s2.sage from student s1 join student s2 on s1.sage=s2.sage where s1.sname=李勇 and s2.sname!=李勇,16、查询计算机系年龄最小的2名学生的姓名和年龄 select top 2 with ties sname,sage from student where sdept=计算机系order by sage asc17、查询VB考试成绩最高的前2名学生的姓名、所在系和VB成绩,包括并列的情况 select top 2 with ties sname,sdept,grade from student s join sc on s.sno=sc.sno join course c on o=o where cname=VB order by grade desc18、查询选课门数最多的前2名学生的学号和选课门数,包括并列的情况 select top 2 with ties sno,count(*) from sc group by sno order by count(*) desc19、查询学生人数最多的系,列出系名和人数。 select top 1 sdept,count(*) from student group by sdept order by count(*) desc,20、用子查询实现如下查询: 1)查询选修了”C01“课程的学生姓名和所在系 select sname,sdept from student where sno in(select sno from sc where con=c01) 2)查询数学系成绩80分以上的学生的学号、姓名、选的课程号和成绩 select sno,sname,cno,grade from student join sc on student.sno=sc.sno where sdept=数学系 and sno in (select sno from sc where grade80),20、3)查询计算机系考试成绩最高的学生的姓名 select sname from student s join sc on s.sno=sc.sno where sdept=计算机系 and grade=(select max(grade) from sc join student s on s.sno=sc.sno where sdept=计算机系) 4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩 select sname,sdept,ssex,grade from student s join sc on s.sno=sc.sno join course on o=o where cname=数据结构 and grade=(select max(grade) from sc join count on o=o where cname=数据结构),21、查询没有选修VB课程的学生的姓名和所在系 select sname sdept from student s join sc on s.sno=sc.sno join course c on o=o where cname!=VB22、查询计算机系没有选课的学生的姓名和所在系 select sname from student s left join sc on s.sno = sc.sno Where sdept = 计算机系 and o is null,23、查询计算机系考试平均最低的学生的姓名以及所选的课程名select sname,cname from student s join sc on s.sno=sc.sno join course c on o=o where sdept = 计算机系 and sno=(select top 1 sno from sc order by ave(grade) asc),24、查询1-5学期中选课人数最少的课程的课程名、开课学期和学分SELECTCname,Semester,CreditFROMCourseWHERE(CnoIN (SELECTTOP1WITHtiescnoFROMscGROUPBYcno ORDERBYCOUNT(*)ASC)AND(SemesterBETWEEN1AND5),25、create table test_t( col1 int, col2 char(10) not null, col3 char(10) insert into test_t(col2) values(b1) insert into test_t(col1,col2,col3) values(1,b2,c2) insert into test_t(col1,col2) values(2,b3),26、删除考试成绩低于50分的学生的该门课程的选课记录delete from sc where grade60 and sdept=计算机系,29、删除VB考试成绩最低的学生的VB选课记录 delete from sc join student s on s.sno=sc.sno join course c on o=o where cname=vb and grade=(select min(grade) from sc join student s on sc.sno=s.sno where cname=vb),30、将第2学期开设的所有课程的学分增加2分update course set credit=credit+2 where semester=231、将VB课程的学分改为3分update course set credit=credit+2 where cname=vb32、将计算机系学生的年龄增加1岁update student set sage=sage+1 where sdept=计算机系,33、将信息系学生的“计算机文化学”课程的考试成绩加5分update sc set grade=grade+5 where cno in(select cno from course where cname=计算机系 ) and sno in (select sno from student where sdept=信息系)34、将选课人数最少的课程的学分降低1分update course set credit=credit-1 where cno = (select top 1 cno from sc group by cno order by count(*) asc),第六章作业,9、1)在student表上为sname列建立一个聚集索引,索引名为sldx create clustered index sldx on student(sname)2)在course表上为cname列建立一个唯一的非聚集索引,索引名为cnidx create unique nonclustered index cnidx on course(cname)3)在SC表上为SNO和CNO建立一个组合的聚集索引,索引名为snocnoidx Create clustered index snocnoidx on sc(sno,cno)4)删除SNAME列上建立的sldx 索引Drop index sldx,12、1)查询学生的学号、姓名、所在系、课程名、课程号、课程学分create view v1 as select s.sno,sdept,cno,cname,credit from student s join sc on s.sno=sc.sno join course c on o=o2)查询学生的学号、姓名、选修的课程名和考试成绩create view v2 as select s.sno,sname,cname,grade from student s join sc on s.sno=sc.sno join course c on o=o3) 统计每个学生的选课门数,要求列出学生学号和选课门数create view v3 as select sno,count(*) as total from sc group by sno4) 统计每个学生的选课总学分,要求列出学生学号和总学分(说明:考试成绩大于等于60分才能获得此门课程的学分)create view v4 as select sno,sum(credit) total_credit from sc join course c on o=o where grade=60 group by sno,13、1)查询考试成绩大于等于90分得学生的姓名、课程名和成绩select sname,cname,grade from v2 where grade=902)查询选课门数超过3门的学生的学号和选课门数select * from v3 where total33)查询计算机系选课门数超过3门的学生的姓名和选课门数select sname,total from v3 join student s on v3.sno=s.sno4)查询修课总学分超过10分的学生的学号、姓名、所在系和修课总学分select v4.sno,sname,sdept,total_credit from v4 join student s on s.sno=v4.sno where total_credit105)查询年龄大于等于20的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分select sname,sage,sdept,total_credit from v4 join student s on v4.sno=s.sno where sage=20 and total_credit=10,14、修改视图v4,使其查询每个学生的学号、总学分和总的选课门数alter view v4 as select sno,sum(credit),count(*) from sc join course c on o=o group by sno,第七章作业,6、关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)语义:一个学生可以选多门课程,一门课程可以被多名学生选。一个学生有唯一的所在系,每门课程有唯一的课程名和学分答:候选码为(学号,课程号),同时也是此关系模式的主键分解:学生表(学号,姓名,所在系,性别)课程表(课程号,课程名,学分)选课表(学号,课程号,成绩),7、关系模式:学生(学号,姓名,所在系,班号,班主任,系主任)语义:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个班只有一名班主任,一个系可以有多个班。答:候选码为学号,同时也是此关系模式的主键分解:学生表(学号,姓名,所在系,班号)班级表(班号,班主任)选课表(所在系,系主任),8、关系模式:教师授课(课程号,课程名,学分,授课教师号,教师名,授课时数)语义:一名课程(有课程号决定)有确定的课程名和学分,每名教师(有教师号决定)有确定的教师名,每门课程可以有多名教师讲授,每名教师也可以讲授多门课程,每名教师对每门课程有确定的授课时数答:候选码为(课程号,授课教师号),同时也是此关系模式的主键分解:课程表(课程号,课程名,学分)教师表(教师号,教师名)授课表(课程号,教师号,授课时数),