3. SQL 中基本表更新
基本表更新
1. 插入数据 – INSERT INTO
1.1 插入元组
格式
NSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>] … )
INTO子句
- 属性列的顺序可与表定义中的顺序不一致
- 没有指定属性列
- 指定部分属性列
VALUES子句
- 提供的值必须与INTO子句匹配
- 值的个数
- 值的类型
【例】将一个新学生元组(学号:200215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中。
INSERT
INTO Student (Sno,Sname,Ssex,Sdept,Sage)
VALUES ('200215128','陈冬','男','IS',18);
【例】 将学生张成民的信息插入到Student表中。
INSERT
INTO Student
VALUES ('200215126', '张成民', '男',18,'CS');
【例】插入一条选课记录( ‘200215128’,’1 ‘)。
INSERT
INTO SC(Sno,Cno)//RDBMS将在新插入记录的Grade列上自动地赋空值
VALUES ('200215128','1');
//等价
INSERT
INTO SC
VALUES ('200215128','1',NULL);
1.2 插入子查询结果
格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
INTO子句(与插入元组类似)
子查询
- SELECT子句目标列必须与INTO子句匹配
- 值的个数
- 值的类型
【例】对每一个系,求学生的平均年龄,并把结果存入数据库。
第一步:建表
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;
2. 修改数据 – UPDATE SET
** 语句格式**
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
** SET 子句**
- 指定修改方式
- 要修改的列
- 修改后取值
WHERE子句
- 指定要修改的元组
- 缺省表示要修改表中的所有元组
** 三种修改方式**
- 修改某一个元组的值
- 修改多个元组的值
- 带子查询的修改语句
【例】将学生201215121的年龄改为22岁。
UPDATE Student
SET Sage=22
WHERE Sno='201215121';
【例】将所有学生的年龄增加1岁。
UPDATE Student
SET Sage= Sage+1;
【例】将计算机科学系全体学生的成绩置零。
UPDATE SC
SET Grade=0
WHERE 'CS'=(
SELECT Sdept
FROM Student
WHERE Student.Sno = SC.Sno
);
3. 删除数据 –DELETE
三种删除方式
删除某一个元组的值
删除多个元组的值
带子查询的删除语句
【例】删出学号为 200215128 的学生。
DELETE
FROM Student
WHERE Sno= '200215128';
【例】删除所有的学生选课记录。
DELETE
FROM SC;/
【例】删除计算机科学系所有学生的选课记录。
DELETE
FROM SC
WHERE 'CS'=(
SELECT Sdept
FROM Student
WHERE Student.Sno=SC.Sno
);
3. SQL 中基本表更新
http://yuukichen.github.io/2024/07/05/sql中基本表的更新/