目录
3.5 数据更新
数据更新操作有三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。
3.5.1 插入数据
SQL的数据插入语句INSERT通常有两种形式,一种是插入一个元组,另一种是插入子查询结果(可以一次插入多个元组)。
插入元组
插入元组的INSERT语句的一般格式
INSERT
INTO <表名>(属性列1,属性列2…)
VALUES(常量1,常量2…);
【例3.69】将一个新学生元组(学号:201215133;姓名:陈东;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215133','陈东','男','IS',18);
INTO 子句不写属性名的情况
**【3.70】将学生张成民的信息插入到Student表中。 **
INSERT
INTO Student
VALUES ('201215126','张成民','男',18,'CS');
这个的结果是不能运行,然后稍微改了一下
INSERT
INTO Student
VALUES (201215126,'张成民','男',18,'CS');
需要注意的地方是:插入值要与表的属性列一一对应,不然可能会因为数据不匹配出错(逻辑上也是不正确的)
【例3.71】插入一条选课记录( ‘200215128’,'1 ')
INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1');
在Grade属性值缺省的情况下,关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。
或者
INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1',NULL);
因为没有指出SC的属性名,在Grade列上要明确的给出空值
插入子查询结果
子查询不仅可以嵌套在SELECT语句中用以构造父查询的条件,也可以嵌套在INSERT语句中用以生成要插入的批量数据。
插入子查询结果的INSERT语句的一般格式
INSERT
INTO<表名>[属性列1,属性列2…]
子查询;
【例3.72】对每一个系,求学生的平均年龄,并把结果存入数据库。
先建立一个新表
CREATE
TABLE Dept_age(Sdept CHAR(15),Avg_age SMALLINT);
然后插入
INSERT
INTO Dept_age(Sdept,Avg_age)
--子查询
SELECT Sdept,AVG(Sage)
FROM Student
GROUP BY Sdept;
3.5.2 修改数据
修改操作又称为更新操作,其语句的一般格式为
UPDATE 表名
SET <列名1>=<表达式1>,…
WHERE 控制条件;
修改某一个元组的值
【例3.73】将学生201215121的年龄改为22岁。
UPDATE Student
SET Sage = 22
WHERE Sno = '201215121