数据库学习笔记和小练习(2)数据更新

参考自《数据库系统概论》

数据的更新操作有三种:向表中添加若干行数据,修改表中的数据和删除表中的若干行数据。

1.insert

如果指定了属性列名,但是有的属性列没有出现,那么新元祖在这些列上取空值,注意,在表定义时说明了not null的属性列不能取空值,否则出错。

如果into子句中没有指明任何属性列名,则新插入的元祖必须在每个属性列上均有值。

insert into student
(Sno,Sname,Ssex,Sdept,Sage)
values('201215128','陈冬','男','IS',18);

into子句的属性列的顺序可以和表不一样,value子句的常量值只要和into子句的对应就可以了。

insert into student
values('201215126','张成明','男',18,'CS');

还可以不指定属性列,但是这样就必须和表的属性列一致。

insert into sc(Sno,Cno)
values('201215128','1');

那么在新插入记录的grade列上自动的赋空值。

(这句话是执行失败的,因为sc是子表,学生表和课程表(父表)必须有相应的学生和课程才能插入,否则就相当于一个不存在的学生选了一个不存在的课程)

或者:

insert into sc
values('201215128','1',null);

没有给出sc的属性名,俺么grade列上需要明确的给出空值。

同样insert还可以插入子查询的结果(这里其实是嵌套查询)这里我们先建一个表,用以存放插入的结果。

create table dept_age
(
Sdept char(15),
Avg_age smallint
);
下面内存查询的into子句的表的属性列一定是和内层查询select的属性列是一一对应的

我们要插入系名和该系的平均年龄,可以使用聚集函数avg,但是操作的主体要分组得到,所以分组(group by子句)是必然的.

依赖于分组,这也是聚集函数的意义所在。


2.update

update Student
set Sage=22
where Sno='201215126';
修改了一个元组的值

update student
set Sage=Sage+1;

将所有学生的年龄增加一岁

子查询也可以嵌套在update语句中,用以构造修改的条件:

update sc
set Grade=0
where Sno in
(
select Sno
from student
where Sdept='CS'
);
首先,where后的属性列是和select的属性列一一对应的,其次where 子句中使用in子句,相当于select的所有结果(如果有的话)中满足条件的。


3.delete

delete from student
where Sno='201215128';

执行操作之后相应记录被删除。

delet from sc;

将删除所有学生的选课记录

带子查询的删除语句:

delete from sc
where Sno in
(
select Sno
from student
where Sdept='CS'
);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值