暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle融合语句

Oracle微学堂 2019-07-08
530

融合语句

MERGE INTO table_name table_alias

USING (table|view|sub_query) alias

ON (join condition)

WHEN MATCHED THEN

UPDATE SET

col1 = col_val1,

col2 = col2_val

WHEN NOT MATCHED THEN

INSERT (column_list)

VALUES (column_values);

建立实验表,e1和e2表中有重复的人,但工资不同

CONN SCOTT/TIGER

DROP TABLE E1;

DROP TABLE E2;

CREATE TABLE E1 AS SELECT EMPNO,ENAME,SAL

FROM EMP WHERE DEPTNO=10;

CREATE TABLE E2 AS SELECT EMPNO,ENAME,SAL

FROM EMP WHERE DEPTNO IN (10,20);

UPDATE E2 SET SAL=SAL+100;

COMMIT;

SQL> select * from e1;

EMPNO ENAME SAL

---------- ---------- ----------

7782 CLARK 2450

7839 KING 5000

7934 MILLER 1300


SQL> select * from e2;

EMPNO ENAME SAL

---------- ---------- ----------

7369 SMITH 900

7566 JONES 3075

7782 CLARK 2550

7839 KING 5100

7902 FORD 3100

7934 MILLER 1400

这两张表有同名称的人,但工资不相同。

E1<----E2 将e2融合到e1表中

merge into E1

USING E2

ON (E1.EMPNO=E2.EMPNO)

WHEN MATCHED THEN

UPDATE SET

E1.SAL=E1.SAL

WHEN NOT MATCHED THEN

INSERT VALUES(E2.EMPNO,E2.ENAME,E2.SAL);

COMMIT;


SQL> SELECT * FROM E1 order by 1;

EMPNO ENAME SAL

---------- ---------- ----------

7369 SMITH 900

7566 JONES 3075

7782 CLARK 2450

7839 KING 5000

7902 FORD 3100

7934 MILLER 1300

6 rows selected.


SQL> SELECT * FROM E2 order by 1;

EMPNO ENAME SAL

---------- ---------- ----------

7369 SMITH 900

7566 JONES 3075

7782 CLARK 2550

7839 KING 5100

7902 FORD 3100

7934 MILLER 1400

E1表的前两行是自己的,没有变化,后面的行是e2表追加的。

Merge是update和insert的结合体,有做upate ,没有做insert。

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!



最后修改时间:2019-12-20 16:17:31
文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论