Insert语句(单条、多条、多表)插入数据的三种用法总结 您所在的位置:网站首页 sql批量更新单个字段的多条数据是什么 Insert语句(单条、多条、多表)插入数据的三种用法总结

Insert语句(单条、多条、多表)插入数据的三种用法总结

#Insert语句(单条、多条、多表)插入数据的三种用法总结| 来源: 网络整理| 查看: 265

        关于insert语句,相信大多数程序开发人员都比较熟悉,在平时开发过程中用的最多的可能就是单表单条插入、单表多条插入的用法,使用多表多条插入的用法则用的比较少,今天我们就一起看下:

第一种:单表单条插入

“insert into”    这种用法向单表中插入1条记录,这是Insert语句最基本的用法,无论使用JAVA还是PHP或者其他程序语言,在代码开发过程中,这种是用最多的一种用法。

SQL> insert into bonus (ename, job, sal, comm) values ('SMITH', 'CLERK', 800.00, null); 1 row inserted SQL>

第二种:单表多条插入:

“insert into  select” 这种用法在BI项目,数据集成的ETL过程中用的比较多。最典型的应用场景就是,从另外一个A表里查询,将数据插入到B表里,在插入数据的同时进行数据处理,例如如从员工表EMP中取出员工工资数据,再将工资增加10%,插入到员工工资表BONUS中,实现了数据处理过程。

SQL> insert into bonus (ename, job, sal, comm) 2 select ename, job, sal * 1.1 , comm 3 from emp ; 14 rows inserted SQL>

第三种:多表多条插入:

“insert into all ”这种方式可以实现根据不同的条件,将数据插入到不同的表中。具体看下面测试步骤:

        首先,创建3个表 SMALL_SAL、MEDIUM_SAL、LARGE_SAL,三个表中的字段相同,都是EMPNO,ENAME,SAL 这三个字段 。

SQL> create table SMALL_SAL as select EMPNO,ENAME,SAL from emp where 1=2 ; Table created SQL> create table MEDIUM_SAL as select EMPNO,ENAME,SAL from emp where 1=2 ; Table created SQL> create table LARGE_SAL as select EMPNO,ENAME,SAL from emp where 1=2 ; Table created SQL>

        然后,再验证下SQL查询出来的数据:

SQL> select empno,ename,sum(sal+ nvl(comm,0)) as sal 2 from emp 3 group by empno,ename 4 ; EMPNO ENAME SAL ----- ---------- ---------- 7521 WARD 1750 7566 JONES 2975 7844 TURNER 1500 7876 ADAMS 1100 7499 ALLEN 1900 7369 SMITH 800 7782 CLARK 2450 7839 KING 5000 7698 BLAKE 2850 7900 JAMES 950 7902 FORD 3000 7788 SCOTT 3000 7654 MARTIN 2650 7934 MILLER 1300 14 rows selected SQL>

        第三,执行insert into all 语句 ,根据计算工资+奖金的总额,并按照工资总额的大小区间分别插入到3个表中:

SQL> insert all 2 when sal < 1000 then into small_sal 3 when sal >= 1000 and sal < 3000 then into medium_sal 4 else into LARGE_SAL 5 select empno,ename,sum(sal+ nvl(comm,0)) as sal 6 from emp 7 group by empno,ename 8 ; 14 rows inserted SQL> commit; Commit complete SQL>

        第四,验证下SMALL_SAL、MEDIUM_SAL、LARGE_SAL三个表的数据:

SQL> select * from SMALL_SAL order by sal ; EMPNO ENAME SAL ----- ---------- --------- 7369 SMITH 800.00 7900 JAMES 950.00 SQL> select * from MEDIUM_SAL order by sal ; EMPNO ENAME SAL ----- ---------- --------- 7876 ADAMS 1100.00 7934 MILLER 1300.00 7844 TURNER 1500.00 7521 WARD 1750.00 7499 ALLEN 1900.00 7782 CLARK 2450.00 7654 MARTIN 2650.00 7698 BLAKE 2850.00 7566 JONES 2975.00 9 rows selected SQL> select * from LARGE_SAL order by sal ; EMPNO ENAME SAL ----- ---------- --------- 7902 FORD 3000.00 7788 SCOTT 3000.00 7839 KING 5000.00 SQL>

        经过验证,结果符合我们当初期望,将不同工资总额区间的数据插入到了不同的表。

        最后,现在有一个问题: 如果我们在insert into all 语句中,不使用 when  then条件会出现什么结果呢? 即语句写成:

insert all into small_sal into medium_sal into LARGE_SAL select empno,ename,sum(sal+ nvl(comm,0)) as sal from emp group by empno,ename;

         没错,这个语句会将select 语句查询的结果分别无条件插入三个表中,即三个表的数据是一样的。有兴趣的朋友可以试试。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有