3. 关系数据库标准语言 SQL
3.5 数据更新
### 数据更新操作
- 向表中添加数据
- 修改表中的数据
- 删除表中的数据
### 插入数据
- 插入一个元组
- 插入子查询结果
### 插入元组
INSERT
INTO <表名> [(<属性列 1> [,<属性列 2>]...)]
VALUES (<常量 1> [,<常量 2>]...);
### 插入功能
- 将新元组插入到指定表中
- 新元组的 <属性列 1> 的值为 <常量 1>
- 其它以此类推
- 新元组在 INTO 子句中没出现的属性列上取空值
- 表定义时 NOT NULL 的属性列不能取空值
- 如果 INTO 子句中没有指明任何属性列名, 则新插入的元组必须在每个属性列上都有值
### 例 69
INSERT
INTO Student (Sno, Sname, Ssex, Sdept, Sage)
VALUES ('2012151281', '陈冬', '男', 'IS', 18);
- 将一个新元组插入到 Student 表中
- 属性顺序可以与 CREATE TABLE 中的顺序不一样
### 例 70
INSERT
INTO Student
VALUES ('201215126', '张成民', '男', 18, 'CS');
- 将学生信息插入到 Student 表中
- 新元组在表的所有属性列上都指定值
- 属性列的次序与 CREATE TABLE 中的次序相同
### 插入子查询结果
INSERT
INTO <表名> [(<属性列 1> [, <属性列 2>... )]
子查询;
- 子査询可以嵌套在 INSERT 语句中, 生成要插入的批量数据
### 例 72
INSERT
INTO Dept_age(Sdept, Avg_age)
SELECT Sdept, AVG(Sage) FROM Student
GROUP BY Sdept;
- 对每一个系求学生的平均年龄并存入数据库
### 修改数据
UPDATE <表名>
SET <列名> = <表达式> [,<列名> = <表达式>]...
[WHERE <条件>];
- 又称为更新操作
- 修改指定表中满足 WHERE 子句条件的元组
- SET 子句给出 <表达式> 的值
### 修改某一元组
UPDATE Student
SET Sage = 22
WHERE Sno = '201215121';
- 将学生 201215121 的年龄改为22岁
### 修改多个元组
UPDATE Student
SET Sage = Sage + 1;
- 将所有学生年龄增加 1 岁
### 带子查询的修改语句
UPDATE SC
SET Grade = 0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept = 'CS');
- 将计算机科学系全体学生的成绩置零
### 删除数据
DELETE
FROM <表名>
[WHERE <条件>];
- 从指定表中删除满足 WHERE 子句条件的所有元组
- DELETE 删除的是表中数据, 而不是表定义
### 删除某一个元组
DELETE
FROM Student
WHERE Sno ='201215128';
- 删除学生记录
### 删除多个元组
DELETE
FROM SC;
- 删除所有的学生选课记录
### 带子查询的删除语句
DELETE
FROM SC
WHERE Sno IN
(SELECT Sno
FROM Student
WHERE Sdept = 'CS');
- 删除计算机科学系所有学生的选课记录

### 3.5 数据更新
- 如何向特定表中添加新的数据元组?
- 如果未在 INTO 子句中指定某个属性列, 那么这个属性列的值是什么?
- 如何将子查询结果插入到表中?
- 如何使用 UPDATE 语句修改特定表中的数据?
- 如何在 SQL 中删除指定表中的某一元组?
----
[ 3.4 数据查询](dbds-3-4.html#/overview)
[| 练习 |](dbds-exec.html)
[ 3.6 视图](dbds-3-6.html#/overview)