数据更新

一、 插入数据

SQL 的数据插入语句 insert 通常有两种形式,一种是插入一个元组,另一种是插入子查询结果。后者可以一次插入多个元组。

1. 插入元组

插入元组的 insert 语句格式为

insert
into <表名> [(<属性列 1>[,<属性列 2>]...)]
values (<常量 1>[,<常量 2>]...);

其功能是将新元组插入指定表中。其中新元组的 属性列1 的值为 常量1 ,属性列2 的值为 常量2 ,…

into 子句中没有出现的属性列,新元组在这些列上将取空值,但必须注意的是,在表定义时说明了 not all 的属性列不能取空值,否则会出错

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

  • 例1:将一个新学生元组 (学号:201215128,姓名:陈东,性别:男,所在系:CS,年龄:18)插入到 Student 表中。
insert
into Student (Sno,Sname,Ssex,Sdept,Sage)
values ('201215128','陈东','男','CS',18);

在 into 子句中指出了表名 Student ,并指出了新增加的元组在哪些属性上要赋值,属性的顺序可以与 create table 时表的顺序(建表时列的顺序)不一样,values 子句对新元组的各属性赋值,字符串常数要用单引号(英文符号)括起来

  • 例2:将学生张成民的信息插入到 Student 表中
insert
into Student
values('201215126','张成民','男',18,'CS');

与例1不同的是,into 子句中只指出了表名,没有指出属性名。这表示新元组在表的所有属性列上都有指定值,属性列的次序与 create table 时表的顺序(建表时列的顺序)相同

values 子句对新元组的各属性列赋值,一定要注意值与属性列要一一对应,如果没有对应,则可能会造成数据类型不匹配出错

  • 例3:插入一条选课记录(‘201215128’,‘1’)。
insert
into SC(Sno,Cno)
values('201215128','1');

关系型数据库管理系统将在新插入记录的 Grade 列上自动地赋空值。

或者:

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

因为没有指出 SC 的属性名,在 Grade 列上要明确给出空值

2. 插入子查询结果

子查询不仅可以嵌套在 select 语句中用以构造父查询的条件,也可以嵌套在 insert 语句中用以生成要插入的批量数据。

插入子查询结果的 insert 语句格式为

insert
into <表名> [<属性列1>,<属性列2>]
子查询;
  • 例1:对每一个系,求学生的平均年龄,并把结果存入数据库。

首先在数据库中建立一个新表,其中一列存放系名,另一列存放相应的学生平均年龄

create table Dept_age
		(Sdept char(15)
         Avg_age samllint);

然后对 Student 表按系分组求平均年龄,再把系名和平均年龄存入新表中

insert
into Dept_age(Sdept,Avg_age)
select Sdept,AVG(Sage)
from Student
group by Sdept;

二、修改数据

修改操作又称为更新操作,其语句一般格式为

update <表名>
set <列名>=<表达式>[, <列名>=<表达式>]....
[where <条件>];

其功能是修改指定表中满足 where 子句条件的元组。其中 set 子句给出 <表达式> 的值用于取代相应的属性列值。如果省略 where 子句,则表示要修改表中所有元组。

1. 修改某一个元组的值
  • 例1:将学生 201215121 的年龄改为22岁。
update Student
set Sage=22
where Sno='201215121';
2. 修改多个元组的值
  • 例1:将所有学生的年龄增加1岁。
update Student
set Sage=Sage+1;
3. 带子查询的修改语句

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

  • 例1:将计算机系全体学生的成绩置零
update SC
set Grade=0
where Sno in 
	(select Sno 
     from Student
     where Sdept='CS');

三、删除数据

删除语句的一般格式为

delete 
from <表名>
[where<条件>];
1. 删除某一个元组的值
  • 例1:删除学号为 201215128 的学生记录
delete 
from Student
where Sno='201215128';
2. 删除多个元组的值
  • 例1:删除所有的学生选课记录
delete
from SC

这条 delete 语句将使 SC 成为空表,它删除了 SC 的所有元组

3. 带子查询的删除语句

子查询同样可以嵌套在 delete 语句中,用以构造执行删除操作的条件

  • 例1:删除计算机系所有学生的选课记录
delete
form SC
where Sno in
		(select Sno
         from Student
         where Sdept='CS');

对某个基本表中数据的增,删,改操作可能会破坏参照完整性,后面会详细说明如何进行参照完整性检测和控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值