1、 给IS系的学生开设7号课程,建立相应的选课记录,成绩为空
这一题,是需要我们进行更新的操作,我们可以根据学员信息进行学号的选择,然后,在sc表中进行课程号的增加,这样就可以完成实验了。
insert into sc
select student.sno ,'7',null
from student
where student.sdept = 'Is'
我们可以看下结果:
首先,看到student表中,学院为”Is”的学生学号为2005003和2005012
所以,在sc表中,应该是这两个同学的课程增加了7号课程:
看到成绩为空的课程中,有2005003和2005012的7号课程,所以,更新成功。
2、 在表student中检索每门课都不及格的学生学号,姓名,年龄,性别以及所在院系信息,并把检索到的信息存入新表ts中。
我们可以看到,这一题首先是需要我们进行表格的建立的,所以,我们需要先建立一个表格,这里使用最笨的方法进行表格的建立,也就是把student的表格信息全部复制过来,新建表格ts,这样就可以了。在建立了表格之后,我们可以进行的就是,信息的筛选,由于全部都不及格,所以,可以等价为最大值不及格,这样的话,全部都会不及格,因此可以通过group by进行筛选,完成这次的实验。
create table ts(
sno int(7) primary key not null,
sname char(10),
sage int(2),
ssex enum('男','女'),
sdept char(10));
insert into ts
select *from student
where sno in(
select sno
from sc
group by sno
having max(grade)<60)
我们看到上面其实第一步是建立表格,可以看下表格的信息为:
所以,是可以输出正常的信息的,然后,就可以进行筛选了,由于我们需要输出的是全部不及格的学生信息,所以,没有参加考试的就不会算在里面,因此我们的最后的结果为:
3、 把学号为2005001的学生姓名改为“刘华”,年龄增加1岁
我们这里面就需要利用update set这一类的语法进行操作,可以通过选择对应的学号,然后对其他的信息进行操作,就可以完成实验了。
update student
set sname = '刘华',sage = sage+1
where sno = '2005001'
可以看到,我们原来的数据为:
所以,更改后的信息为:
可以看到结果是正确的。
4、 把选修了“数据库系统”课程而成绩不及格的学生的成绩全部改为空值
我们可以进行的与上一题类似的操作,只是在上一个的基础上加入了一个嵌套语句,因为我们是有两个判定条件,一个是不及格,另一个是选修数据库,所以,我们需要利用嵌套语句进行书写,来得到最后的结果:
update sc
set grade = null
where grade < 60 and cno in (
select cno
from course
where cname = '数据库系统')
可以看到的是,数据库系统的课程号为:
所以,我们在看之前在1号课程中的学生成绩情
可以看到2005011是不及格的,所以,我们应该会修改这个同学的成绩:
可以看到,我们的结果是正确的。
5、 学生王林在三号课程中考试作弊,该课成绩改为空值
这里有几个需要注意的地方,一个是学生王林,一个是三号课程,所以,还是一个双语句的判定,因此,我们进行实验,可以通过和上一题中类似的方法进行,这样就可以完成实验。
update sc
set grade = null
where cno = '3' and sno in (
select sno
from student
where sname = '王林')
我们看到,之前的学生王林只选择了2号课程,所以,是没有结果的,并没有对表进行修改,所以,我们可以数据的修改,改为对2号课程进行修改,这样的话,我们可以看到结果为:
所以,我们的结果是正确的,确实是被修改了。
6、 把成绩低于平均成绩的女同学的成绩提高5%
这里,我们需要注意的是先算出平均成绩,然后,在进行数据的更新,但是这里有一个问题,就是不可以对需要update的对象进行操作,所以,我们需要利用两个select进行分析,这样就可以很好的完成实验了:
update sc set grade=grade*(1+0.05)
where grade<(
select avg_grade
from(
select AVG(grade)
as avg_grade
from sc)
as temp)
and sno in (
select sno
from student
where ssex = '女')
首先,我们可以看到性别为‘女’的学生的学号为:
然后,对应着,找到他们的成绩变动为:
左边为变动之前的性别为女的学生的信息情况,右边为变动之后的情况。可以看到的是确实发生了变化。
7、 在基本表sc中修改课程号位‘2’号的课程成绩,成绩小于等于80分时降低2%,成绩大于80分的时候降低1%。
这一道题目可以用两种方法进行实验:
A、 利用两个update语句实现,也就是书上的例子,这样可以很好的完成这次的题目,但是略显笨拙,不是很简便,有很多重复的语句:
update sc set grade = grade * 0.98 where grade <= 80 and cno = '2'
update sc set grade = grade * 0.99 where grade > 80 and cno = '2';
B、 第二种就是利用when和case语句进行书写,这一种比较简单,可以适用于多种选择的情况下:
update sc
set grade = case
when grade <=80 then grade * 0.98
else grade * 0.99
end
where cno = '2';
可以看到最后的结果为:
左边的是修改前的成绩,右边的是修改后的成绩。
8、 把“钱横”的选课记录全部删除
这里利用的是另一种操作,delete,和update基本一致,语法也差不多,可以轻松解决:
delete from sc
where sc.sno in(
select student.sno
from student
where student.sname = '钱横')
我们可以看到结果为:
由于前面,我们知道钱横的学号为2005001,所以,我们可以查找先sc中学号为2005001的信息,可以看到为空,所以是被删掉了。
9、 能删除2005001的学生记录吗?一定要删除应该如何操作?给出操作命令
可以删除,我们需要删除的记录除了student之外,还有一个是sc中的数据,所以,需要删除两个表的数据:
delete from sc
where sc.sno in(
select student.sno
from student
where student.sno = '2005001');
delete from student where sno = '2005001'
可以看到,结果为:
在sc中查询为空:
在student中查询也为空:
因此我们的结果是正确的。