- SQL之数据更新
- 实现:插入数据 - INSERT INTO
- 可以:插入元组
- 可以:插入子查询获取元组
- 实现:修改数据 - UPDATE SET
- 可以:修改单元组的值
- 可以:修改全元组的值
- 可以:使用子查询
- 实现:删除数据 - DELTE FROM
- 可以:删除单元组
- 可以:删除全部元组
- 可以:使用子查询
- 最后:补充说明
SQL之数据更新
文章为个人读书总结笔记 发现错误以及如果有什么建议可以及时通知我哟!
本文介绍更新数据的三大操作:插入,修改,删除
注意这边的数据指的是元组(单元组,多元组
实现:插入数据 - INSERT INTO
SQL提供INSERT INTO
语句执行数据的插入
可以:插入元组
介绍插入单元组的细节
- 格式
INSERT
INTO <表名> [( <属性列1>[,<属性列2>]... )]
VALUES (<常量1> [,<常量2>]... )
- 解释
- 常量和属性列一一对应
- 简单说明:注意这边的一一对应(但是
INTO
子句后的属性列顺序可以不同于CREATE TABLE
时指定的属性定义顺序
INSERT
INTO S(Sno,Sname,Ssex,Sdept,Sage)
VALUES ('100','小k','男','CS',20);
- 若属性列全部列出则可以只写表名
- 简单说明:插入的数据对应全部的列属性
INSERT
INTO S
VALUES ('100','小k','男','CS',20);
- 若属性列未全部列出 (你可以选择显式指出NULL,或者将自动赋空值
- 简单说明:Sage自动为
NULL
INSERT
INTO S(Sno,Sname,Ssex,Sdept)
VALUES ('100','小k','男','CS');
- 若这些列在定义时指出
NOT NULL
可能会出错误,要避免
可以:插入子查询获取元组
插入子查询即为插入多个元组的实现,这边将使用到SELECT-FROM-WHERE
子查询, 若不熟悉的话可以参照我的另外一篇博文 ” SQL之数据查询 “
- 插入子查询的格式:对照插入单个元组的格式来理解(子查询提供了多元组
INSERT
INTO <表名> [( <属性列1>[,<属性列2>]... )]
子查询;
- 例子:对于每一个Sdept,求均值,将结果存入数据库
CREATE TABLE Dept_age(
Sdept CHAR(15),
Avg_age SMALLINT);
INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept,AVG(Sage)
FROM S
GROUP BY Sdept;
- 执行过程
- 子查询输出单元组Sdept及对应的均值AVG(Sage)
- 将单元组输入到Dept_age表
- 继续重复第一步
实现:修改数据 - UPDATE SET
参照于插入数据,依然有两种方式,即修改单元组或者修改多元组,多元组方面由子查询来实现
比较特殊的就是修改全部元组!
- 一般格式
UPDATE <表名>
SET <列名>=<表达式> [,<列名>=<表达式>] ...
[WHERE <条件>]
SET
子句
- 由一至多个 属性-表达式 对组成,表达式取代属性的值
WHERE
子句
- 指出了满足的元组
- 特殊:未写出
WHERE
子句,则默认全部元组均满足
可以:修改单元组的值
- 例子:针对S表,将Sno为100的数据中,Sage属性列的值修改为18
UPDATE S
SET Sage=18
WHERE Sno='100';
可以:修改全元组的值
- 例子:将所有元组的Sage属性列值增加1
UPDATE S
SET Sage=Sage+1;
可以:使用子查询
这边的子查询用于构造条件
- 例子:将Sdept为’CS’的全部数据的Grade属性列全部设置为0
UPDATE SC
SET Grade=0
WHERE Sno IN(
SELECT Sno
FROM S
WHERE Sdept='CS');
实现:删除数据 - DELTE FROM
参照修改数据,由WHERE
来指定满足的元组,不写出WHERE
子句则全部元组为满足元组
这边要注意的是:删除的是表中的数据,而非表的定义
关于表定义参考我的另外一篇博文 “SQL之数据定义”
- 格式
DELETE
FROM <表名>
[WHERE <条件>];
可以:删除单元组
- 例子:操作S表,删除Sno为’100’的元组
DELETE
FROM S
WHERE Sno='100';
可以:删除全部元组
- 例子:删除SC表全部数据
DELETE
FROM SC;
可以:使用子查询
这边的子查询也是用于构造条件
- 例子:删除SC表中,满足Sdept为‘CS’的数据
DELETE
FROM SC
WHERE Sno IN(
SELECT Sno
FROM S
WHERE Sdept='CS');
- 执行步骤
- 由子查询根据满足Sdept=’CS’的条件从S表中输出Sno
- 根据满足的Sno所有元组,从SC表中删除这些元组
最后:补充说明
插入,修改,删除均有针对单元组和多元组的操作
多元组可以由子查询来构造条件获取
- 说明
- 如果你以为如上介绍的那么简单,那你就错了,对于某个表的数据进行插入,修改,删除可能会破坏参照完整性
- 不过不用担心,很快我将介绍相关的参照完整性以及如何去检查并控制它们
更多相关资料在 我的”SQL专栏” 中可以找到 !
如果文章对你有帮助的话 给我点个赞吧b( ̄▽ ̄)d !