数据更新
插入数据(insert)
一种是插入一个元组、另一种是插入子查询结果。
插入元组
例 3.69 将一个新学生元组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁插入到Student表中。
insert into Student(Sno,Sname,Ssex,Sdept,Sage)
values('201215128','陈冬','男','IS',18);
在into子句中指出了表名Student,并指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与create table 中的顺序不一样
例 3.70 将学生张成民的信息插入到Student表中。
insert into Student
values('201215126','张成民','男',18,'CS');
into子句中只指出了表名,没有指出属性名。属性列的次序与create table中的次序相同。
例 3.71 插入一条选课记录(‘201215128’,‘1’)
insert into SC(Sno,Cno)
values('201215128','1');
或
insert into SC
values('201215128','1',null);
第一种会在新插入的记录的Grade列上自动地赋空值。
第二种没有指出SC的属性名,在Grade列上要明确给出空值。
插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。
例 3.72 对每个系,求学生的平均年龄,并把结果存入数据库。
首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生评论年龄。
create table Dept_age
(Sdept char(15)
Avg_age smallint);
然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表中。
insert
into Dept_age(Sdept,AVg-age)
select Sdept,avg(Sage)
from Student
group by Sdept;
修改数据(update)
修改指定表中满足WHERE子句条件的元组,其中SET子句给出<表达式>的值用于取代相应的属性列值如果省略了WHERE子句,则子句要修改表中的所有元组
修改某一个元组的值
例 3.73 将学生201215121的年龄改为22岁。
update Student
set Sage=22
where Sno='201215121';
修改多个元组的值
例 3.74 将所有学生的年龄增加一岁。
update Student
set Sage=Sage+1;
带子查询的修改语句
子查询也可以嵌套在UPDATE语句中,用以构造修改的条件。
例 3. 75 将计算机科学系的全体学生的成绩置零。
update SC
set Grade=0
where Sno in(
select Sno from Student
where Sdept='CS');
删除数据(delete)
delete语句删除的是表中的数据,而不是关于表的定义。
删除某一个元组的值
例 3.76 删除学号为201215128的学生记录。
delete from Student
where Sno='201215128';
删除多个元组的值
例 3.77 删除所有学生选课记录
delete
from SC;//SC会成为空表
带子查询的删除语句
删除计算机科学系所有学生的选课记录。
delete from Sc
where Sno in(
select Sno from Student
where Sdept='CS');