UPDATE/INSERT用法研究

时间:2023-03-09 02:07:58
UPDATE/INSERT用法研究

UPDATE和INSERT语法相信大家都很熟悉,UPDATE的基本语法结构是 :

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

INSERT的基本语法是:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

测试环境如下: 

数据库版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

CREATE TABLE DEPT
(
DEPT_NAME VARCHAR2(20 BYTE),
DEPT_ID NUMBER(2)
);

CREATE TABLE EMP
(
EMP_NAME VARCHAR2(20 BYTE),
EMP_ID NUMBER(3),
DEPT_ID NUMBER(2)
);

UPDATE/INSERT用法研究

UPDATE/INSERT用法研究

①多表联合update:现在我们在emp表内增加了一个dept_name字段,并且从dept表将dept_name同步到emp表内。

UPDATE EMP A SET DEPT_NAME=(SELECT DEPT_NAME FROM DEPT B WHERE A.DEPT_ID=B.DEPT_ID)
WHERE EXISTS (
SELECT DEPT_NAME FROM DEPT B WHERE A.DEPT_ID=B.DEPT_ID
)

使用merge语法:

MERGE INTO EMP A
USING DEPT B
ON(A.DEPT_ID=B.DEPT_ID)
WHEN MATCHED THEN UPDATE SET A.DEPT_NAME=B.DEPT_NAME

效果如图:

UPDATE/INSERT用法研究

建议:使用merge语法,效率更高

②多表insert:同样是以上环境,现在要求有一部emp表EMP_dept_1(表结构同emp),二部emp表EMP_dept_2(表结构同emp),要求将emp内dept_id为1的插入emp_dept_1表,dept_id为2的插入EMP_dept_2(也就是对职工表进行分类)

INSERT FIRST
WHEN (DEPT_ID='1')
THEN INTO EMP_DEPT_1
WHEN (DEPT_ID='2')
THEN INTO EMP_DEPT_2
SELECT * FROM EMP

这里的INSERT FIRST 是指当满足第一条插入条件的数据,不会继续进行随后的判断;而如果是insert all则是会继续判断,若是满足后续的条件,也仍然会继续插入;