oracle中的merge into用法解析
阿新 • • 發佈:2018-12-19
實現 過濾 using 相關 table 我們 where delet int oracle中的merge into用法解析
merge into的形式
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHEN NOT MATCHED THEN
[INSERT sql] 作用:判斷B表和A表是否滿足on條件,如果滿足則用B表去更新A表,如果不滿足,則將B表數據插入A表,但有很多可選項。
例如:
1:正常模式
2:只update或者只insert
3:帶條件的update或帶條件的insert
4:全插入insert實現
5:帶delete的update -------------------不做講解 一:正常模式
例如:
MERGE INTO A_MERGE A
USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON (A.id=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR
WHEN NOT MATCHED THEN
INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit; 解析:
1:被更新的表寫在MEGER INTO之後
2:更新來源數據表寫在USING之後,並將相關字段查詢出來,為查詢結果定義別名
3:ON之後表示更新滿足的條件
4:WHEN MATCHED THEN:表示當滿足條件時要執行的操作。
5:UPDATE SET 被更新表.被更新字段 = 更新表.更新字段---此更新語句不同於常規更新語句
6:WHEN NOT MATCHED THEN:表示當不滿足條件時要執行的操作。
7:INSERT (被更新表.被更新字段,...) VALUES(更新表.更新字段,...)。
8:commit:表示提交事務 二:只update或只insert
-------------------------------只更新-------------------------------------------------------- merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON(A.ID=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR;
commit;
解析---只更新模式:
1:將正常模式下的插入語句去除。
2:使用WHEN MATCHED THEN,當滿足條件的情況。
-------------------------------只插入--------------------------------------------------------
merge into A_MERGE A
USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON(A.ID=C.AID)
WHEN NOT MATCHED THEN
insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit;
解析---只插入模式:
1:將正常模式下的更新操作去除
2:使用WHEN NOT MATCHED THEN,當不滿足ON條件時執行插入操作。 三:帶where條件的update和insert
我們在on中進行條件匹配之後,還可以在後面的insert和update中對on刪選出來的記錄再做一次條件判斷,用來控制
那些需要更新,那些需要插入。
merge into A_MERGE A
USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C
ON(A.id=C.AID)
when matched then
update SET A.name=C.name where C.city != ‘江西‘
when not matched then
insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city=‘江西‘;
commit; 解析:
1:當滿足on條件並且滿足where條件才會執行更新操作。
2:當不滿足on條件但是滿足where條件才會執行插入操作。 四:無條件的insert
有時候我們需要將一張表的所有的數據插入到另一張表中,此時就可以添加常量過濾謂詞來實現,讓其只滿足匹配和不匹配,
這樣就只有update或insert操作了。
merge into C_MERGE C
USING (select B.AID,B.NAME,B.City from B_MERGE B) C
ON (1=0)
when not matched then
insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City);
commit; 解析:
on條件處於永遠不匹配的條件,此時就會執行全表插入操作。
merge into的形式
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHEN NOT MATCHED THEN
[INSERT sql] 作用:判斷B表和A表是否滿足on條件,如果滿足則用B表去更新A表,如果不滿足,則將B表數據插入A表,但有很多可選項。
例如:
1:正常模式
2:只update或者只insert
3:帶條件的update或帶條件的insert
4:全插入insert實現
5:帶delete的update -------------------不做講解 一:正常模式
例如:
MERGE INTO A_MERGE A
USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON (A.id=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR
WHEN NOT MATCHED THEN
INSERT(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit; 解析:
1:被更新的表寫在MEGER INTO之後
2:更新來源數據表寫在USING之後,並將相關字段查詢出來,為查詢結果定義別名
3:ON之後表示更新滿足的條件
4:WHEN MATCHED THEN:表示當滿足條件時要執行的操作。
5:UPDATE SET 被更新表.被更新字段 = 更新表.更新字段---此更新語句不同於常規更新語句
6:WHEN NOT MATCHED THEN:表示當不滿足條件時要執行的操作。
7:INSERT (被更新表.被更新字段,...) VALUES(更新表.更新字段,...)。
8:commit:表示提交事務 二:只update或只insert
-------------------------------只更新-------------------------------------------------------- merge into A_MERGE A USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON(A.ID=C.AID)
WHEN MATCHED THEN
UPDATE SET A.YEAR=C.YEAR;
commit;
解析---只更新模式:
1:將正常模式下的插入語句去除。
2:使用WHEN MATCHED THEN,當滿足條件的情況。
-------------------------------只插入--------------------------------------------------------
merge into A_MERGE A
USING (select B.AID,B.NAME,B.YEAR from B_MERGE B) C
ON(A.ID=C.AID)
WHEN NOT MATCHED THEN
insert(A.ID,A.NAME,A.YEAR) VALUES(C.AID,C.NAME,C.YEAR);
commit;
解析---只插入模式:
1:將正常模式下的更新操作去除
2:使用WHEN NOT MATCHED THEN,當不滿足ON條件時執行插入操作。 三:帶where條件的update和insert
我們在on中進行條件匹配之後,還可以在後面的insert和update中對on刪選出來的記錄再做一次條件判斷,用來控制
那些需要更新,那些需要插入。
merge into A_MERGE A
USING (select B.AID,B.name,B.year,B.city from B_MERGE B) C
ON(A.id=C.AID)
when matched then
update SET A.name=C.name where C.city != ‘江西‘
when not matched then
insert(A.ID,A.name,A.year) values(c.AID,C.name,C.year) where C.city=‘江西‘;
commit; 解析:
1:當滿足on條件並且滿足where條件才會執行更新操作。
2:當不滿足on條件但是滿足where條件才會執行插入操作。 四:無條件的insert
有時候我們需要將一張表的所有的數據插入到另一張表中,此時就可以添加常量過濾謂詞來實現,讓其只滿足匹配和不匹配,
這樣就只有update或insert操作了。
merge into C_MERGE C
USING (select B.AID,B.NAME,B.City from B_MERGE B) C
ON (1=0)
when not matched then
insert(C.ID,C.NAME,C.City) values(B.AID,B.NAME,B.City);
commit; 解析:
on條件處於永遠不匹配的條件,此時就會執行全表插入操作。
oracle中的merge into用法解析