建立的数据库
student数据表: course数据表:
sc数据表:
(1)、给IS系的学生开设7号课程,建立相应的选课记录,成绩为空。
insert intosc select student.sno,'7',null from student where student.sdept='Is';
(2)、在表student中检索每门课均不及格的学生学号、姓名、年龄、性别及所在系的信息,并把检索到的信息存入新表ts中。
首先修改sc中的成绩,使得有3人的成绩均不及格:
insertinto sc value ('2005001',1,50);
insertinto sc value ('2005001',2,50);
insertinto sc value ('2005001',3,50);
insertinto sc value ('2005002',2,50);
insert intosc value ('2005003',3,50);
然后创建数据表并查询:
droptable if exists ts;
createtable ts(sno char(20) primary key, sname varchar(20), sage int(20), ssexchar(20), sdept char(20));
insert into ts (select * from student where sno in (select sno from sc group by sno havingmax(grade)<60));
INSERT INTO TS SELECT * FROM STUDENT WHERE 60 > ALL (SELECT GRADE FROM SC WHERE SC.SNO=STUDENT.SNO)
INSERT INTO TS SELECT * FROM STUDENT WHERE 60 >(SELECT MAX(GRADE) FROM SC WHERE SC.SNO=STUDENT.SNO)
INSERT INTO TS SELECT * FROM STUDENT WHERE NOT EXISTS (SELECT GRADE,SNO FROM SC WHERE SC.SNO=STUDENT.SNO AND GRADE>=60)
INSERT INTO TS SELECT * FROM STUDENT WHERE SNO IN (SELECT SNO FROM SC WHERE SNO NOT IN (SELECT SNO FROM SC WHERE GRADE>59))
(3)、将学号为2005001的学生姓名改为刘华,年龄增加一岁。
更新前为:
更新后:
updatestudent set sname='刘华', sage=sage+1 where sno = '2005001';
(4)、把选修了“数据库系统”课程而成绩不及格的学生的成绩全部改为空值。
增加一个学生的数据库系统成绩不及格:
insert intosc value ('2005002',1,59);
修改成绩:
update sc setgrade=null where grade < 60 and cno in (select cno from course where cname='数据库系统');
(5)、学生王林在3号课程考试作弊,该课程成绩改为空值。
增加王林在3号课程的成绩:
insert intosc value ('2005002',3,100);
修改成绩:
update sc setgrade=null where cno=3 and sno in (select sno from student where sname='王林');
(6)、把成绩低于总平均成绩的女同学成绩提高5%。
注释掉增加的两条数据,按照原始数据库:
selectavg(grade) from sc;
得到平均成绩:
选择两个女生的信息将成绩改为低于平均成绩:
insertinto sc value ('2005002',2,70);
insert intosc value ('2005004',4,70);
update sc set grade=1.05*grade where grade<(select avg(grade) from (select * from sc) as s) and sno in (select sno from student where ssex='女');
注意这里需要使用别名,因为不能同时更新sc又在sc中选择数据。
更新后为:
(7)、在基本表sc中修改课程号为2的课程成绩,成绩小于等于80分时降低2%,成绩大于80分时降低1%,用两个update语句实现。
update scset grade=0.98*grade where cno=2 and grade <=80;
update sc setgrade=0.99*grade where cno=2 and grade >80;
小于80分原成绩:
修改后:
大于80分原成绩:
修改后:
(8)、把钱横的选课记录全部删去。
因为在第三小题中把钱横的名字改成刘华了,所以已经没有了钱横的数据。注释掉第三小题的代码,重新运行一遍,就恢复了钱横的信息。
delete fromsc where sno in (select sno from student where sname='钱横');
删除之后,打开sc数据表,已经没有了学号为2005001的数据。
(9)、可以删除2005001的学生记录吗?
可以删除,但是由于sno是sc参照student的外键,所以必须要先删除sc中的信息,再才能删除student中的信息。
deletefrom sc where sno='2005001';
delete fromstudent where sno='2005001';