度量快速开发平台-专业、快速的软件定制快开平台

标题: MERGE 语句 [打印本页]

作者: fteair    时间: 2020-3-1 18:52
标题: MERGE 语句
1、MERGE 语句的语法
       MERGE语句,可以称其为“融合”语句,它相当于插入与更新语句的综合。通常是对两个表进行操作,是执行对目的表的更新操作还是执行对目的表的插入操作,取决于基于ON子句中的条件。MERGE有以下特点:避免分散更新,增进性能和易用性,在数据仓库应用中有用。MERGE合并的语法如下
[url=][/url]
MERGE INTO table_nametable_alias       ---指定你正在更新或插入的目的表USING (table|view|sub_query) alias     ---指定要用于更新或插入的数据源ON (join condition)              ---类似于表连接条件,在此条件下即可更新也可进行插入WHEN MATCHED THEN                ---当满足条件时,更新该条记录到目的表中UPDATE
SET col1 = col1_val[,col2 = col2_val...]WHEN NOT MATCHED THEN            ---当不满足条件时,插入该条记录到目的表中INSERT (column_list)VALUES (column_values);
[url=][/url]

       在数据仓库环境中,你可能有一个大的事实表和一个较小维数的表,小表中的行需要有条件地插入到大的事实表中,比如处理来自多个源的数据工作时,其中的一些可能是完全相同的,需要有条件地添加或修改行。在这种情况下,MERGE语句是有用的。
       2、MERGE 语句的例子
       现在,要把员工表EMP_COPY的数据合并到员工表EMP中,通过匹配EMP_COPY表的EMPNO列和EMP表的EMPNO列。如果找到了一个匹配,用EMP_COPY表中匹配行的列值更新EMP表中匹配的列值。如果相匹配行没有找到,EMP_COPY表中匹配行的列值被插入到COPY_EMP表中。

----构造一个用于合并的员工表emp_copyCREATE TABLE emp_copy AS SELECT * FROM emp WHERE deptno in (10,40);INSERT INTO emp_copy (empno,ename,job,mgr,hiredate,sal,comm,deptno)VALUES (7899,'ASD','CLERK',7839,To_Date('2017-1-23','yyyy-mm-dd'),2000,0,10);UPDATE emp_copy SET sal=1900 WHERE empno=7934;----把员工表EMP_COPY的数据合并到员工表EMP中MERGE INTO emp eUSING emp_copy cON (e.empno=c.empno)WHEN MATCHED THENUPDATESET e.ename=c.ename, --由于ON条件中已有e.empno=c.empno,故此处不能出现该句。    e.job=c.job,    e.mgr=c.mgr,    e.hiredate=c.hiredate,    e.sal=c.sal,    e.comm=c.comm,    e.deptno=c.deptnoWHEN NOT MATCHED THENINSERTVALUES(c.empno,c.ename,c.job,c.mgr,c.hiredate,c.sal,c.comm,c.deptno);

作者: 张兴康    时间: 2020-3-5 18:03

作者: fteair    时间: 2020-3-5 18:38
张兴康 发表于 2017-4-5 18:03


作者: 张兴康    时间: 2020-3-6 19:11
fteair 发表于 2017-4-5 18:38


作者: fteair    时间: 2020-3-7 18:37
张兴康 发表于 2017-4-6 19:11






欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2