insert into语句总结 与 merge into用法总结
insert SQL用途:
1、为表插入单行数据
2、也可以通过子查询将一张表的多行数据插入到另外一张表里面
3、同时为多张表插入数据
语法:
INSERT INTO <TABLE> [(colum[,column.....])]VALUES (values[,value....])
table: 指定表或视图
column:指定列名,多列之间用,分开
value: 指定待插入的数据,多值之间依,分开
注意事项:
①.INSERT时既可以指定列,也可以不指定列表
如果不指定列表,则values子句必须为table中的每个列提供数据,且数据顺序与列顺序相同
如果 指定列表,提供的数据的顺序需与相应列对应
②.数字列可之间写入,字符列或日期列插入数据时必须使用单引号引住
③.插入数据必须满足约束规则,主键列和NOT NULL列必须提供数据值
④.插入的数据必须与列的个数及顺序保持一致
insert into应用实例:
基础应用
--新增一个部门:提供列 insert into gem_file(gem01,gem02,gem03,gem07,gem05,gemacti) values('2BSB','文青部','文艺青年部','M','Y','Y'); --新增一个部门:不提供列名,则需为table中的每列提供数据,即使为NULL也要提供 insert into gem_file values('2BNB','文青部','文艺青年部',DEFAULT,'Y','','M',DEFAULT,'Y','terry','','','','',''); --可以使用 DEFAULT 提供默认值,如果没有设置默认值则此列数据为NULL
使用子查询插入数据
①.当使用VALUES子句插入数据时,一次只能够插入一行数据
②.还可以将一张表的数据赋值到另外一张表中,方便处理数据表的迁移复制及装载
语法:INSERT INTO <TABLE> [(column[,column],.....)] subQuery
注意:insert列的数据个数必须和subQuery子查询的列的个数及数据类型完全匹配
--将sstl_ft该用户azi_file表中有效的币别档信息复制到sstl_dx用户同表中 insert into sstl_dx.azi_file select * from sstl_ft.azi_file where aziacti = 'Y'; --将sstl_ft该用户azi_file表中有效的币别档信息复制到sstl_dx用户同表中 --采用APPEND直接装载 insert /*+APPEND */ into sstl_dx.azi_file -- /*+APPEND */ 直接装载 select * from sstl_ft.azi_file where aziacti = 'Y'; --上面两条SQL结果的效果是一样的,但是后面一条使用的直接装载当大批量数据时,直接装载速度远远优于普通的insert
使用多表插入数据( oracle 9i后的功能 )
语法:INSERT ALL insert_into_clause [value_clause] subquery;
INSERT condition_insert_clause sunquery;
说明:insert_into_clause: 指定insert 子句
value_clause: 指定值子句
subquery: 提供数据的子查询
condition_insert_clause:insert条件子句
--使用ALL关键字将总公司的AR单依来源分别复制到子公司AR单 insert ALL WHEN oma66='SSTL_DX' THEN INTO sstl_dx.oma_file WHEN oma66='SSTL_ZK' THEN INTO sstl_zk.oma_file WHEN oma66='SSTL_FT' THEN INTO sstl_ft.oma_file SELECT * from sstl.oma_file where omaacti = 'Y'; --使用FIRST关键字将总公司的AR单依来源分别复制到子公司AR单 --如果数据已经满足了先前条件并且已经被插入到某表,那么该行数据在后续插入将不会被再次使用 --主要应用于WHEN后面的条件判断交叉时做条件管控 insert FIRST WHEN oma66='SSTL_DX' THEN INTO sstl_dx.oma_file WHEN oma66='SSTL_ZK' THEN INTO sstl_zk.oma_file WHEN oma66='SSTL_FT' THEN INTO sstl_ft.oma_file SELECT * from sstl.oma_file where omaacti = 'Y';
merge into应用:实现 无则insert插入,有则update更新,一条语句直接进行insert/update操作
merge ino语法:
MERGE INTO table1 alias1--将总公司sstl的客户信息occ_file数据表和子公司sstl_dx的客户信息occ_file核对 --如果sstl_dx公司的客户信息和sstl不同,则依据sstl客户信息更新sstl_dx的客户信息 --如果sstl_dx公司没有,则将sstl的客户信息新增入sstl_dx公司 MERGE INTO sstl_dx.occ_file dx_occ USING sstl.occ_file sstl_occ ON(dx_occ.occ01 = sstl_occ.occ01) WHEN MATCHED THEN update set dx_occ.occ02 = sstl_occ.occ02, dx_occ.occ03 = sstl_occ.occ03, dx_occ.occ04 = sstl_occ.occ04, dx_occ.occ05 = sstl_occ.occ05, ... where dx_occ.occacti = 'Y' WHEN NOT MATCHED THEN insert values(sstl_occ.occ01,sstl_occ.occ02,sstl_occ.occ03,sstl_occ.occ04,sstl_occ.occ05,...) where sstl_occ.occacti = 'Y';
http://blog.csdn.net/yihuiworld