Oracle中merge into的使用:该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据.
2013-07-18 15:23
686 查看
该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动。
1,insert 和update是可选的
2,UPDATE 和INSERT 后面可以跟WHERE 子句
3,在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表
4,UPDATE 子句后面可以跟delete 来去除一些不需要的行。
举例:
create table PRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
commit;
create table PRODUCTS_new
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS_new values (1666, 'HARRY POTTER', 'DVD');
commit;
select * from PRODUCTS;
select * from PRODUCTS_new;
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
1.insert 和update 都带有where 字句:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name WHERE p.category = 'DVD'
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY) WHERE np.category != 'BOOKS';
2.无条件的insert:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--无条件insert
ON (1=0)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
本文出自 “紫晶幻治” 博客,谢绝转载!
1,insert 和update是可选的
2,UPDATE 和INSERT 后面可以跟WHERE 子句
3,在ON条件中可以使用常量来insert 所有的行到目标表中,不需要连接到源表和目标表
4,UPDATE 子句后面可以跟delete 来去除一些不需要的行。
举例:
create table PRODUCTS
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS values (1501, 'VIVITAR 35MM', 'ELECTRNCS');
insert into PRODUCTS values (1502, 'OLYMPUS IS50', 'ELECTRNCS');
insert into PRODUCTS values (1600, 'PLAY GYM', 'TOYS');
insert into PRODUCTS values (1601, 'LAMAZE', 'TOYS');
insert into PRODUCTS values (1666, 'HARRY POTTER', 'DVD');
commit;
create table PRODUCTS_new
(
PRODUCT_ID INTEGER,
PRODUCT_NAME VARCHAR2(60),
CATEGORY VARCHAR2(60)
);
insert into PRODUCTS_new values (1666, 'HARRY POTTER', 'DVD');
commit;
select * from PRODUCTS;
select * from PRODUCTS_new;
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
1.insert 和update 都带有where 字句:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--当p.PRODUCT_ID = np.PRODUCT_ID时
ON (p.PRODUCT_ID = np.PRODUCT_ID)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name WHERE p.category = 'DVD'
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY) WHERE np.category != 'BOOKS';
2.无条件的insert:
--将PRODUCTS表中的数据导入PRODUCTS_new
MERGE INTO PRODUCTS_new p
USING PRODUCTS np
--无条件insert
ON (1=0)
--如果匹配则执行下面sql(update)
WHEN MATCHED THEN
UPDATE SET p.product_name = np.product_name
--如果不匹配则执行下面sql(insert)
WHEN NOT MATCHED THEN
insert values(np.PRODUCT_ID,np.PRODUCT_NAME,np.CATEGORY);
本文出自 “紫晶幻治” 博客,谢绝转载!
相关文章推荐
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用MERGE INTO 语句更新数据的脚本
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用一条insert语句完成多表插入
- Oracle 使用MERGE INTO 语句更新数据
- Oracle 使用MERGE INTO 语句更新数据
- oracle使用一条语句批量插入多条数据
- Oracle 使用MERGE INTO 语句更新数据
- oracle MERGE INTO语句使用方法(有则更新无则插入)
- 详解MySQL插入和查询数据的相关命令及语句使用
- 如何从一个表的数据更新到另外一个表的列或者插入
- Excel中导入到oracle使用merge into 差异性更新数据库
- Oracle 使用一条语句删除重复数据
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)
- 【SQL】使用一条INSERT语句完成多表插入
- oracle使用 merge 更新或插入数据(总结)
- Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例