oracle中merge into用法
merge into的形式:
[sql] view plain copy
- 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]
1.正常模式
2.只update或者只insert
3.帶條件的update或帶條件的insert
4.全插入insert實現
5.帶delete的update(覺得可以用3來實現)
下面一一測試。
測試建以下表:
[sql] view plain copy
- create table A_MERGE
- (
- id NUMBER not
- name VARCHAR2(12) not null,
- year NUMBER
- );
- create table B_MERGE
- (
- id NUMBER not null,
- aid NUMBER not null,
- name VARCHAR2(12) not null,
- year NUMBER,
- city VARCHAR2(12)
- );
- create table C_MERGE
- (
- id NUMBER not null,
- name VARCHAR2(12) not null,
- city VARCHAR2(12) not null
- );
- commit;
A_MERGE表結構:
B_MERGE表結構
C_MERGE表結構
1.正常模式
先向A_MERGE和B_MERGE插入測試資料:
[sql] view plain copy
- insert into A_MERGE values(1,'liuwei',20);
- insert into A_MERGE values(2,'zhangbin',21);
- insert into A_MERGE values(3,'fuguo',20);
- commit;
- insert into B_MERGE values(1,2,'zhangbin',30,'吉林');
- insert into B_MERGE values(2,4,'yihe',33,'黑龍江');
- insert into B_MERGE values(3,3,'fuguo',,'山東');
- commit;
此時A_MERGE和B_MERGE表中資料截圖如下:
A_MERGE表資料:
B_MERGE表資料:
[sql] view plain copy
- 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;
2.只update模式
首先向B_MERGE中插入兩個資料,來為了體現出只update沒有insert,必須有一個數據是A中已經存在的
另一個數據時A中不存在的,插入資料語句如下:
[sql] view plain copy
- insert into B_MERGE values(4,1,'liuwei',80,'江西');
- insert into B_MERGE values(5,5,'tiantian',23,'河南');
- commit;
A_MERGE表資料截圖:
B_MERGE表資料截圖:
然後再次用B_MERGE來更新A_MERGE,但是僅僅update,沒有寫insert部分。
[sql] view plain copy
- 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;
3.只insert模式
首先改變B_MERGE中的一個數據,因為上次測試update時新增的資料沒有插入到A_MERGE,這次可以用。
[sql] view plain copy
- update B_MERGE set year=70 where AID=2;
- commit;
A_MERGE表資料:
B_MERGE表資料:
然後用B_MERGE來更新A_MERGE中的資料,此時只寫了insert,沒有寫update:
[sql] view plain copy
- 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;
4.帶where條件的insert和update。
我們在on中進行完條件匹配之後,還可以在後面的insert和update中對on篩選出來的記錄再做一次條件判斷,用來控制哪些要更新,哪些要插入。
測試資料的sql程式碼如下,我們在B_MERGE修改了兩個人名,並且增加了兩個人員資訊,但是他們來自的省份不同,
所以我們可以通過新增省份條件來控制哪些能修改,哪些能插入:
[sql] view plain copy
- update B_MERGE set name='yihe++' where id=2;
- update B_MERGE set name='liuwei++' where id=4;
- insert into B_MERGE values(6,6,'ningqin',23,'江西');
- insert into B_MERGE values(7,7,'bing',24,'吉安');
- commit;
B_MERGE表資料:
然後再用B_MERGE去更新A_MERGE,但是分別在insert和update後面添加了條件限制,控制資料的更新和插入:
[sql] view plain copy
- 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;
此時A_MERGE截圖如下:
5.無條件的insert。
有時我們需要將一張表中所有的資料插入到另外一張表,此時就可以新增常量過濾謂詞來實現,讓其只滿足
匹配和不匹配,這樣就只有update或者只有insert。這裡我們要無條件全插入,則只需將on中條件設定為永假
即可。用B_MERGE來更新C_MERGE程式碼如下:
- 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
-
相關推薦
Oracle中Merge into用法總結 (轉載)
字符 存在 sin 刪除 ron mic 但是 多個 前段時間 Oracle中Merge into用法總結 (出處:http://www.cnblogs.com/dongsheng/p/4384754.html) 起因: 前段時間,因為涉及到一張表的大數據操作,要同時
oracle中merge into用法
merge into的形式: [sql] view plain copy MERG
oracle中merge into用法解析
merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...) WHEN MATCHED THEN [UPDAT
oracle中 merge into 的用法
大數據 char 條件 http -1 alt mat 一個表 dml語句 很多時候我們需要通過篩選條件同時對表進行 更新,插入,刪除 等操作。這樣如果我們單一的去操作表會顯得很麻煩,下面會說到這個merge into 的用法會極大的優化我們操作表的時間和代碼量。 舉例,
ORACLE 中merge....into的用法簡單瞭解一下
MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and […]…) WHEN MATCHED THEN [UPDATE sql] WHEN NO
oracle中merge into..using..on..when..when..用法
語法:MERGE INTO [your table-name] [rename your table here] USING ( [write your query here] )[rename your query-sql and using just like a ta
oracle中merge into的使用
rollback 裏的 get express pre sql語句 可選 需求 目標 Oracle在9i引入了merge命令, 通過這個merge你能夠在一個SQL語句中對一個表同時執行inserts和updates操作. 當然是update還是insert是依據於你的指定
Oracle的Merge into用法總結
簡單的說就是,判斷表中有沒有符合on()條件中的資料,有了就更新資料,沒有就插入資料。 有一個表T,有兩個欄位a、b,我們想在表T中做Insert/Update,如果條件滿足,則更新T中b的值,否則在T中插入一條記錄。在Microsoft的SQL語法中,很簡單的一句判斷就可以了,SQL Se
oracle中的merge into用法解析
實現 過濾 using 相關 table 我們 where delet int oracle中的merge into用法解析merge into的形式 MERGE INTO [target-table] A USING [source-table sql] B ON([c
Oracle 中MERGE語句的用法(轉載)
同時 sdn ble reat nth merge type href detail 原文章出處(http://blog.csdn.net/lichkui/article/details/4306299) MERGE語句是Oracle9i新增的語法,用來合並UPDATE和I
PLSQL 中Merge into和Update的用法
這兩天一直在處理關於SQL server儲存過程轉換到Oracle中,也發現一些oracle語句的區別。 在oracle 中有個語法:merge 用法如下: merge into 表1 using 表2 或者(select*from 表2)別名
oracle merge into 用法
MERGE INTO 是Oracle 9i以後才出現的新的功能。那這個功能 是什麼呢? 簡單來說,就是:“有則更新(update),無則插入(insert)”; 從這句話裡,應該可以理解到,merge into 操作一個物件'A'的時候,要有另外一個結果集做為源資料 'B'. ‘merge int
oracle一張表向另一張表插入不重複資料merge into用法
參考1: 由於專案中需要用到批量插入,為了防止使用者插入重複的資料,需要先判斷插入的資料是不是已經存在,如果存在則忽略這次插入,否則插入這條資料,剛開始的時候是先用一條SQL語句判斷,如果返回結果是真(記錄已經存在),則忽略,否則插入這條資料,這樣的話插入一條資料
sql語句EXISTS的用法和oracle中substr的用法
參數 ... ble 索引 效率 put www 長度 重復記錄 轉需:EXISTS 指定一個子查詢,檢測 行 的存在。語法: EXISTS subquery參數: subquery 是一個受限的 SELECT 語句 (不允許有 COMPUTE 子句和 INTO 關鍵字)。
【基礎】ORACLE中substr的用法
itl .cn 字符串 ref art from 基礎 htm bst ORACLE中substr函數的簡單用法 substr(字符串,截取開始位置,截取長度) //返回截取的字 substr(‘Hello World‘,0,1) //返回結果為 ‘H‘ *從字符串第一
ORACLE 中 TRANSLATE的用法
spa sele select abcde ora 保留 用法 ans class --TRANSLATE(string,from_str,to_str) --to_str和from_str中的字符一一對應 --如果string裏有,from_str字符集裏沒有的字符,
Oracle中with as用法
分組 關鍵字 視圖 group 高效 這也 過程 avi 臨時 with as 相當於虛擬視圖。 例子:需求描述 按照x列分組後統計y列的總值,最終目標是選出比y列總值的三分之一大的那些分組統計信息 使用子查詢方式實現最容易想到的方法 SELECT x, SUM (y)
pandas中merge的用法
使用過sql語言的話,一定對join,left join, right join等非常熟悉,在pandas中,merge的作用也非常類似。直接上例子: import numpy as np import pandas as pd from pandas import Series,
Merge into用法總結
從備份表中更新欄位到正式表中,使用 UPDATE 批量更新大量的資料,會出現效率低下,有時候甚至卡死的情況,後面通過使用 MERGE INTO 代替 UPDATE 執行批量更新,會提升執行效率。 MERGE INTO語法如下: MERGE INTO table_name alias1&nbs
oracle中to_date詳細用法示例(oracle日期格式轉換)
1. 日期和字元轉換函式用法(to_date,to_char) select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期轉化為字串 select to_char(sysd