大家好,欢迎来到IT知识分享网。
文章目录
- 前言
- 一、数据更新之插入数据
-
- 1.插入单个元组
-
- (1)语句格式
- (2)语法说明
-
- INTO子句
- VALUES子句
- 插入规则
- (3)举例讲解
-
- 例子1:
- 例子2:
- 易犯错误
- 2.插入子查询结果
-
- (1)语句格式
- (2)语法说明
-
- INTO子句(与插入单条元组类似)
- 子查询
- 查询规则
- (3)举例讲解
-
- 例子1:新建一张表存放每部门员工的平均工资。
- 二、数据更新之修改数据
-
- 1.修改某一个元组的值
-
- (1)语法格式
- (2)语法说明
-
- SET子句
- WHERE子句
- 语法规则
- (3)举例讲解
-
- 例子1:部门调整
- 2.修改多个元组的值
-
- (1)举例讲解
-
- 例子1:为员工发放薪金
- 3.带子查询的修改语句
-
- (1)语法结构
- (2)举例讲解
-
- 例子1:不知道部门编号的情况下发奖金
- 三、数据更新之删除数据
-
- 1.删除某一元组的值
-
- (1)语法格式
- (2)语法说明
-
- FROM子句
- WHERE子句
- (3)举例讲解
-
- 例子1:删除离职人员信息
- 2.删除多个元组的值
-
- (1)举例讲解
-
- 例子1:解散部门
- 3.带子查询的删除语句
-
- (1)语法格式
- (2)举例讲解
-
- 例子1:不知道部门编号的情况下解散部门
- 4.删除的易错点
-
- (1)违反完整性约束条件
- (2)DELETE不支持CASCADE
- 总结
前言
本文主要讲解了SQL语言中的数据更新的语法,并且举例进行相关知识的说明和讲解。
一、数据更新之插入数据
1.插入单个元组
插入单个元组可以理解为给表插入一行数据
(1)语句格式
功能:将新元组插入指定表中
INSERT INTO <表名> [(<属性1>[,<属性2>...])] VALUES (<常量1>[,<常量2>]...);
(2)语法说明
INTO子句
- 指定要插入数据的表名及属性列
- 属性列的顺序可与表定义中的顺序不一致
- 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
- 指定部分属性列:插入的元组在其余属性列上取空值(ORACLE这条不适用)
VALUES子句
- 提供的值必须与INTO子句匹配
– 值的个数
– 值的类型
插入规则
b.参照完整性
c.用户定义的完整性
- 对于有NOT NULL约束的属性列是否提供了非空值
- 对于有UNIQUE约束的属性列是否提供了非重复值
- 对于有值域约束的属性列所提供的属性值是否在值域范围内
(3)举例讲解
例子1:
插入单个元组进入表:
INSERT INTO DEPT VALUES ('50','MARKETING','BEIJING');
例子2:
INSERT INTO DEPT VALUES ('60','TECHNOLOGY','');
插入方法2:
INSERT INTO DEPT VALUES ('60','TECHNOLOGY',NULL);
易犯错误
NULL值多了单引号,表示插入的是NULL这个单词,而不是插入的空值
正确代码:
INSERT INTO DEPT VALUES ('60','TECHNOLOGY',NULL);
错误代码:
INSERT INTO DEPT VALUES ('60','TECHNOLOGY','NULL');
结果会发现错误的代码相当于把NULL当成字符串写入了表中。
2.插入子查询结果
将子查询结果插入到指定表中
(1)语句格式
INSERT INTO <表名> [(<属性1>[,<属性2>...])] 子查询;
(2)语法说明
INTO子句(与插入单条元组类似)
- 指定要插入数据的表名及属性列
- 属性列的顺序可与表定义中的顺序不一致
- 没有指定属性列:表示要插入的是一条完整的元组
- 指定部分属性列:插入的元组在其余属性列上取空值(ORACLE这条不适用)
子查询
SELECT子句目标列必须与INTO子句匹配
- 值的个数
- 值的类型
查询规则
b.参照完整性
c.用户定义的完整性
- 对于有NOT NULL约束的属性列是否提供了非空值
- 对于有UNIQUE约束的属性列是否提供了非重复值
- 对于有值域约束的属性列所提供的属性值是否在值域范围内
(3)举例讲解
例子1:新建一张表存放每部门员工的平均工资。
- 第一步,先建一张表,表字段DEPTNO、AVGSAL
- 第二步,查询EMP表中的部门平均工资,将查到的值插入新建的表中
CREATE TABLE DEPT_AVGSAL ( DEPTNO NUMBER(2,0) NOT NULL, AVGSAL NUMBER(6,2) NOT NULL, CONSTRAINT DEPT_AVGSAL_PK PRIMARY KEY ( DEPTNO ) ENABLE );
INSERT INTO DEPT_AVGSAL(DEPTNO,AVGSAL) SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;
二、数据更新之修改数据
1.修改某一个元组的值
修改指定表中满足WHERE子句条件的元组
(1)语法格式
UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]… [WHERE <条件>];
(2)语法说明
SET子句
指定修改方式
- 要修改的列
- 修改后取值
WHERE子句
指定要修改的元组
- 缺省表示要修改表中的所有元组
语法规则
b.主码不允许修改
c.用户定义的完整性
- NOT NULL约束
- UNIQUE约束
- 值域约束
(3)举例讲解
例子1:部门调整
UPDATE EMP SET DEPTNO=50 WHERE ENAME='SMITH';
2.修改多个元组的值
语法格式和规则与修改单个元组的值一致,不作赘述
(1)举例讲解
例子1:为员工发放薪金
UPDATE EMP SET SAL=SAL+100;
UPDATE EMP SET COMM=100 WHERE DEPTNO=20;
3.带子查询的修改语句
(1)语法结构
UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]… WHERE (子查询);
(2)举例讲解
例子1:不知道部门编号的情况下发奖金
所有数据与之前的例子一致,这里只放代码,不做过多赘述
UPDATE EMP SET COMM=200 WHERE( SELECT DEPTNO FROM EMP WHERE DNAME='ACCOUNTING' );
三、数据更新之删除数据
1.删除某一元组的值
删除指定表中满足WHERE子句条件的元组
(1)语法格式
DELETE FROM <表名> [WHERE <条件>];
(2)语法说明
FROM子句
指定从哪个表删除
WHERE子句
- 指定要删除的元组所满足的条件
- 缺省表示要修改表中的所有元组
(3)举例讲解
例子1:删除离职人员信息
DELETE FROM EMP WHERE ENAME='MARTIN';
2.删除多个元组的值
语法格式和规则与修改单个元组的值一致,不作赘述
(1)举例讲解
例子1:解散部门
公司裁员,解散RESEARCH部门(假设知道部门编号为20),删除RESEARCH部门的所有信息。
DELETE FROM EMP WHERE DEPTNO=20;
3.带子查询的删除语句
(1)语法格式
DELETE FROM <表名> WHERE (子查询);
(2)举例讲解
例子1:不知道部门编号的情况下解散部门
公司裁员,解散ACCOUNTING部门(假设不知道部门编号),删除ACCOUNTING部门的所有信息。
DELETE FROM EMP WHERE( SELECT DEPTNO FROM EMP WHERE DNAME='ACCOUNTING'; )
4.删除的易错点
(1)违反完整性约束条件
(2)DELETE不支持CASCADE
总结
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121385.html





