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

本文详细介绍了SQL中的Insert语句,包括单表单条插入、单表多条插入以及多表多条插入的用法。通过实例展示了如何根据不同的业务需求,灵活地将数据插入到数据库的不同表中,特别是在数据处理和ETL过程中。同时,文章探讨了使用Insert into all语句时,无条件插入多个表的情况及其结果。
摘要由CSDN通过智能技术生成

        关于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 语句查询的结果分别无条件插入三个表中,即三个表的数据是一样的。有兴趣的朋友可以试试。

单条插入是指一次向数据库插入一条记录,而批量插入是指一次性向数据库插入多条记录。单条插入可以通过执行多个独立的插入语句来实现,每条语句插入一条记录。而批量插入可以通过执行一条包含多个值的插入语句或使用特定的库函数来实现。 在使用MyBatis框架进行数据库操作时,可以使用以下几种方式实现单条插入和批量插入: 1. 单条插入: - 使用MyBatis的`insert`语句,将每个字段的值作为参数传递给SQL语句,执行一次插入操作。 - 通过配置`parameterType`指定参数类型,使用`#{}`占位符将参数值与SQL语句进行绑定。 - 例如:`insert into person (id, name, sex, address) values (#{id}, #{name}, #{sex}, #{address})` 2. 批量插入: - 使用MyBatis的`foreach`标签,将插入语句作为循环体,在循环中逐个插入多条记录。 - 可以通过遍历一个对象集合,将对象的属性作为参数传递给SQL语句,实现批量插入。 - 例如:`insert into person (name, sex, address) values <foreach collection="list" item="item" index="index" separator=","> (#{item.name}, #{item.sex}, #{item.address}) </foreach>` 3. 使用SQL语句实现批量插入: - 可以使用一条包含多个值的插入语句,一次性插入多条记录。 - 例如:`insert into person (id, name, sex, address) values (?,?,?,?),(?,?,?,?)` 通过以上几种方式,可以根据需求选择适合的方法进行单条插入和批量插入操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无极小码哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值