文档章节

ORACLE 多表插入和融合

胡子叭槎
 胡子叭槎
发布于 2017/03/01 22:32
字数 804
阅读 23
收藏 0
  1. 全量多表插入
    insert all into table1 values(col1,col2)
                   into table2 values(col1,col3)
    select  * from table;
    SQL> insert all into wyzc1 values(empno,ename,sal,deptno)
      2             into wyzc2 values(empno,ename,job,mgr,hiredate)
      3  select * from emp;
    
    28 rows created.
    
    SQL> select * from wyzc1;
    
         EMPNO ENAME	     SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7369 SMITH	     800	 20
          7499 ALLEN	    1600	 30
          7521 WARD 	    1250	 30
          7566 JONES	    2975	 20
          7654 MARTIN	    1250	 30
          7698 BLAKE	    2850	 30
          7782 CLARK	    2450	 10
          7788 SCOTT	    3000	 20
          7839 KING 	    5000	 10
          7844 TURNER	    1500	 30
          7876 ADAMS	    1100	 20
          7900 JAMES	     950	 30
          7902 FORD 	    3000	 20
          7934 MILLER	    1300	 10
    
    SQL> select * from wyzc2;
    
         EMPNO ENAME      JOB		MGR HIREDATE
    ---------- ---------- ---------- ---------- ---------
          7369 SMITH      CLERK	       7902 17-DEC-80
          7499 ALLEN      SALESMAN	       7698 20-FEB-81
          7521 WARD       SALESMAN	       7698 22-FEB-81
          7566 JONES      MANAGER	       7839 02-APR-81
          7654 MARTIN     SALESMAN	       7698 28-SEP-81
          7698 BLAKE      MANAGER	       7839 01-MAY-81
          7782 CLARK      MANAGER	       7839 09-JUN-81
          7788 SCOTT      ANALYST	       7566 19-APR-87
          7839 KING       PRESIDENT 	    17-NOV-81
          7844 TURNER     SALESMAN	       7698 08-SEP-81
          7876 ADAMS      CLERK	       7788 23-MAY-87
          7900 JAMES      CLERK	       7698 03-DEC-81
          7902 FORD       ANALYST	       7566 03-DEC-81
          7934 MILLER     CLERK	       7782 23-JAN-82
    
    14 rows selected.

    可以看出一个sql语句插入了两个表都是14条,只是在不同表里面插入的字段不一样。

  2. 条件多表插入
    insert all when 条件1 then into table1 values(col1,col2)
                   when 条件2 then into table2 values(col1,col3)
    select * from table;

    SQL> insert all when sal >= 2000 then into wyzc3 values(empno,ename,sal,deptno)
      2             when sal <  2000 then into wyzc4 values(empno,ename,job,mgr,hiredate)
      3  select * from emp;
    
    14 rows created.
    
    SQL> select * from wyzc3;
    
         EMPNO ENAME	     SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7566 JONES	    2975	 20
          7698 BLAKE	    2850	 30
          7782 CLARK	    2450	 10
          7788 SCOTT	    3000	 20
          7839 KING 	    5000	 10
          7902 FORD 	    3000	 20
    
    6 rows selected.
    
    SQL> select * from wyzc4;
    
         EMPNO ENAME      JOB		MGR HIREDATE
    ---------- ---------- ---------- ---------- ---------
          7369 SMITH      CLERK	       7902 17-DEC-80
          7499 ALLEN      SALESMAN	       7698 20-FEB-81
          7521 WARD       SALESMAN	       7698 22-FEB-81
          7654 MARTIN     SALESMAN	       7698 28-SEP-81
          7844 TURNER     SALESMAN	       7698 08-SEP-81
          7876 ADAMS      CLERK	       7788 23-MAY-87
          7900 JAMES      CLERK	       7698 03-DEC-81
          7934 MILLER     CLERK	       7782 23-JAN-82
    
    8 rows selected.

    可以看出来一个sql语句根据条件的不同插入了不同的数据在不同的表,且字段也不一样。

  3. 融合
    两个表中有相同的数据,需要进行合并。已有的数据修改,没有的数据插入
    mgrer into table1 using table2 on
                      (table1.col=table2.col)
    when no matched then
    insert values(col1,col2)
    when matched then
    update set col1=col1+100;
     

    SQL> select * from wyzc5;
    
         EMPNO ENAME	     SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7369 SMITH	     800	 20
          7566 JONES	    2975	 20
          7782 CLARK	    2450	 10
          7788 SCOTT	    3000	 20
          7839 KING 	    5000	 10
          7876 ADAMS	    1100	 20
          7902 FORD 	    3000	 20
          7934 MILLER	    1300	 10
    
    8 rows selected.
    
    SQL> select * from wyzc6;
    
         EMPNO ENAME	     SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7499 ALLEN	    1600	 30
          7521 WARD 	    1250	 30
          7654 MARTIN	    1250	 30
          7698 BLAKE	    2850	 30
          7782 CLARK	    2450	 10
          7839 KING 	    5000	 10
          7844 TURNER	    1500	 30
          7900 JAMES	     950	 30
          7934 MILLER	    1300	 10
    
    9 rows selected.
    # 两个表中都有部门编号为10的,下面把表wyzc6融合到wyzc5中
    SQL> merge into wyzc5 using wyzc6 on
      2  (wyzc5.empno=wyzc6.empno)
      3  when not matched then
      4  insert values(wyzc6.empno,wyzc6.ename,wyzc6.sal,wyzc6.deptno)
      5  when matched then
      6  update set sal=wyzc6.sal+5;
    
    9 rows merged.
    
    SQL> select * from wyzc5;
    
         EMPNO ENAME	     SAL     DEPTNO
    ---------- ---------- ---------- ----------
          7369 SMITH	     800	 20
          7566 JONES	    2975	 20
          7782 CLARK	    2455	 10
          7788 SCOTT	    3000	 20
          7839 KING 	    5005	 10
          7876 ADAMS	    1100	 20
          7902 FORD 	    3000	 20
          7934 MILLER	    1305	 10
          7844 TURNER	    1500	 30
          7698 BLAKE	    2850	 30
          7499 ALLEN	    1600	 30
          7521 WARD 	    1250	 30
          7654 MARTIN	    1250	 30
          7900 JAMES	     950	 30
    
    14 rows selected.
    # 部门编号10的都加了5,且部门编号30融合经来了。

     

© 著作权归作者所有

胡子叭槎
粉丝 22
博文 140
码字总数 147885
作品 0
成都
数据库管理员
私信 提问
oracle中ddl为什么不能回滚

要说明这个问题,首先需要说明什么是DDL语句。DDL语句是数据定义语句,包括各种数据对象的创建、修改和删除,以及授权等操作。 在Oracle中DDL语句将转化为修改数据字典表的DML语句。一个简单...

zh119893
2013/06/03
100
0
oracle中ddl为什么不能回滚

在ITPUB上看到有人提出了这个问题。在Sqlserver或一些其他的数据库中,DDL语句也是可以回滚的,那么Oracle为什么不能回滚DDL语句呢。 这个问题来自:http://www.itpub.net/thread-1300088-1...

foreverfeng
2012/09/17
101
0
Oracle + Mybatis实现批量插入、更新和删除示例代码

前言 Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据...

一看就喷亏的小猿
2018/11/22
268
0
mysql与Oracle的区别

一、并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。 mysql: mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他ses...

鲸落大叔
2018/06/17
0
0
SQL、NewSQL和NoSQL融合研究与实践

本文根据DBAplus社群第111期线上分享整理而成。 近几年,各类大数据技术迅猛发展,企业中数据处理量呈现几十到几百倍增长,数据类型也从传统结构化数据,延伸到实时流数据,以及各类非结构化...

朱祥磊
2017/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
6
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部