insert first&insert all的区别



insert first/all

 

利用insert first/all使得INSERT语句可以同时插入多张表,还可以根据判断条件来决定每条记录插入到哪张或哪几张表中。

insert first/all语法 
[ ALL | FIRST ] 
WHEN condition THEN insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 
[WHEN condition THEN insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 
]... 
[ELSE insert_into_clause [values_clause] 
[insert_into_clause [values_clause]]... 


insert first/all 是对每一行来进行判断
两者区别:
insert first:对于每一行数据,只插入到第一个when条件成立的表,不继续检查其他条件。
insert all :对于每一行数据,对每一个when条件都进行检查,如果满足条件就执行插入操作。

 

create table test_a(a number,b number);
create table b as select * from test_a;
create table c as select * from test_a;


insert into test_a values(1,0);
insert into test_a values(1,1);
insert into test_a values(1,2);
insert into test_a values(2,0);
insert into test_a values(3,0);

SQL> select * from test_a;

         A          B
---------- ----------
         1          0
         1          1
         1          2
         2          0
         3          0
         
现分别对insert first和insert all语句进行简单测试:(占不考虑SQL是否具有真实作用)      

 

SQL> insert all
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a; 

6 rows created.

Elapsed: 00:00:00.01
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.01
SQL> rollback;

Rollback complete.

Elapsed: 00:00:00.01
SQL> select * from b;

no rows selected

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00
SQL> insert first
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a;    

3 rows created.

Elapsed: 00:00:00.00
SQL> 
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00

 

部分转载自:http://lanying1982.blog.163.com/blog/static/23067748200810122341539/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
insert all是Oracle中的一种特殊语法,用于将同一批数据插入到不同的表中。它可以一次性将数据插入多个目标表中,而不需要多次执行插入操作。 这在需要同时将数据插入多个表时非常有用。 相比之下,insert into是一种常规的插入语句,用于将数据插入单个表中。当需要将数据插入一个表时,可以使用insert into语句一次插入所有的数据。但如果需要将数据插入多个表,就需要多次执行insert into语句。 使用insert all语法可以显著简化多次插入的过程,并且可以提高插入的效率。相较于使用多次insert into语句,insert all只需要执行一次,并且在一次执行中完成了多个插入操作。这样可以减少网络通信的开销和数据库操作的次数,从而提高插入的速度。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Oracle中的insert/insert all/insert first](https://blog.csdn.net/lihuarongaini/article/details/101301812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [mssql insert into 和insert into select性能比较](https://download.csdn.net/download/weixin_38657457/13694986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值