本文主要讲解了SQL语言中的数据更新的语法,并且举例进行相关知识的说明和讲解。
插入单个元组可以理解为给表插入一行数据
功能:将新元组插入指定表中
INSERT
INTO <表名> [(<属性1>[,<属性2>...])]
VALUES (<常量1>[,<常量2>]...);
DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
a.实体完整性
b.参照完整性
c.用户定义的完整性
首先给出目前表的完整性情况:
1、DEPT表有三个字段,分别为DEPTNO、DNAME、LOC
2、其中DEPTNO是主键,不能为空值
3、DNAME和LOC 可以为空值
4、DEPTNO的字符类型是2位整数,DNAME和LOC是字符串
插入单个元组进入表:
INSERT
INTO DEPT
VALUES ('50','MARKETING','BEIJING');
结果:
目前公司打算组建一个技术部(部门编号为60,部门名称为TECHNOLOGY,部门还没想好落户在哪个城市)。
插入方法1:
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当成字符串写入了表中。
将子查询结果插入到指定表中
INSERT
INTO <表名> [(<属性1>[,<属性2>...])]
子查询;
SELECT子句目标列必须与INTO子句匹配
DBMS在执行插入语句时会检查所插元组是否破坏表上已定义的完整性规则
a.实体完整性
b.参照完整性
c.用户定义的完整性
数据存放在表EMP中:
思路:
第一步,先建一张表,表字段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;
结果为:
修改指定表中满足WHERE子句条件的元组
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
指定修改方式
指定要修改的元组
DBMS在执行修改语句时会检查修改操作是否破坏表上已定义的完整性规则
a.实体完整性
b.主码不允许修改
c.用户定义的完整性
将SMITH的部门调整到MARKETING(部门编号50)
原始表如下:
UPDATE EMP
SET DEPTNO=50
WHERE ENAME='SMITH';
语法格式和规则与修改单个元组的值一致,不作赘述
将所有人工资增加100元,设置RESEARCH部门(假设知道部门编号为20)的员工月奖金为100元
原来数据如下:
分两步操作:
UPDATE EMP
SET SAL=SAL+100;
UPDATE EMP
SET COMM=100
WHERE DEPTNO=20;
结果:
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
WHERE (子查询);
所有数据与之前的例子一致,这里只放代码,不做过多赘述
UPDATE EMP
SET COMM=200
WHERE(
SELECT DEPTNO
FROM EMP
WHERE DNAME='ACCOUNTING'
);
删除指定表中满足WHERE子句条件的元组
DELETE
FROM <表名>
[WHERE <条件>];
指定从哪个表删除
员工MARTIN离职,需要删除他的基本信息
DELETE
FROM EMP
WHERE ENAME='MARTIN';
语法格式和规则与修改单个元组的值一致,不作赘述
公司裁员,解散RESEARCH部门(假设知道部门编号为20),删除RESEARCH部门的所有信息。
DELETE
FROM EMP
WHERE DEPTNO=20;
DELETE
FROM <表名>
WHERE (子查询);
公司裁员,解散ACCOUNTING部门(假设不知道部门编号),删除ACCOUNTING部门的所有信息。
DELETE
FROM EMP
WHERE(
SELECT DEPTNO
FROM EMP
WHERE DNAME='ACCOUNTING';
)
文章的不妥之处请各位读者包涵指正。
了解SQL语言的基础知识可以参考:
SQL语言概述与SQL语言的数据定义
SQL语言—数据的查询