SQL语言-数据更新操作

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中查询也为空:

因此我们的结果是正确的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值