CREATE TABLE t2 (
"ID" NUMBER NULL ,
"NAME" VARCHAR2(255 BYTE) NULL ,
"AGE" NUMBER NULL ,
"SE" VARCHAR2(255 BYTE) NULL
)
;
INSERT INTO t2 VALUES ('1201', 'John', '47', 'male');
INSERT INTO t2 VALUES ('1202', 'lili', '30', 'female');
--結果0
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- ---------
1201 Peter 23 male
6695 Lu 12 female
6720 Ka 22 female
SQL> select * from t2;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
1201 John 47 male
1202 lili 30 female
--測驗1
MERGE INTO t1 b
USING t2 e
ON (b.ID = e.ID)
WHEN MATCHED THEN
update
set b.NAME = E.NAME,
b.AGE = E.AGE,
b.SE = E.SE
where t1.name<>'Peter'
delete where (t1.name = 'Peter')
WHEN NOT MATCHED THEN
insert (b.ID,b.NAME,b.AGE,b.SE)
values(E.ID,E.NAME,E.AGE,E.SE) ;
CREATE TABLE t2 (
"ID" NUMBER NULL ,
"NAME" VARCHAR2(255 BYTE) NULL ,
"AGE" NUMBER NULL ,
"SE" VARCHAR2(255 BYTE) NULL
)
;
INSERT INTO t2 VALUES ('1201', 'John', '47', 'male');
INSERT INTO t2 VALUES ('1202', 'lili', '30', 'female');
--結果
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- ---------
1201 Peter 23 male
6695 Lu 12 female
6720 Ka 22 female
SQL> select * from t2;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
1201 John 47 male
1202 lili 30 female
--測驗1
MERGE INTO t1 b
USING t2 e
ON (b.ID = e.ID)
WHEN MATCHED THEN
update
set b.NAME = E.NAME,
b.AGE = E.AGE,
b.SE = E.SE
where t1.name<>'Peter'
delete where (t1.name = 'Peter')
WHEN NOT MATCHED THEN
insert (b.ID,b.NAME,b.AGE,b.SE)
values(E.ID,E.NAME,E.AGE,E.SE) ;
--結果1
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
1201 Peter 23 male
6695 Lu 12 female
6720 Ka 22 female
1202 lili 30 female
可見,通過上述代碼,只是將 t2 中 id 為 1202 的記錄insert到了t1中,并沒有將t1中name為Peter的記錄洗掉,即delete陳述句沒有執行。
rollback 回退結果。
現在表t1中內容為:
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
1201 Peter 23 male
6695 Lu 12 female
6720 Ka 22 female
--測驗2:
MERGE INTO t1 b
USING t2 e
ON (b.ID = e.ID)
WHEN MATCHED THEN
update
set b.NAME = E.NAME,
b.AGE = E.AGE,
b.SE = E.SE
where t1.name='Peter'
delete where (t1.name = 'Peter')
WHEN NOT MATCHED THEN
insert (b.ID,b.NAME,b.AGE,b.SE)
values(E.ID,E.NAME,E.AGE,E.SE) ;
--結果2:
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
1201 John 47 male
6695 Lu 12 female
6720 Ka 22 female
1202 lili 30 female
ID NAME AGE SE
---------- -------------------- ---------- -------------------
6695 Lu 12 female
6720 Ka 22 female
1201 Peter 23 male
--測驗3:
MERGE INTO t1 b
USING t2 e
ON (b.ID = e.ID)
WHEN MATCHED THEN
update
set b.NAME = E.NAME,
b.AGE = E.AGE,
b.SE = E.SE
where b.id='1201'
delete where (b.id = '1201')
WHEN NOT MATCHED THEN
insert (b.ID,b.NAME,b.AGE,b.SE)
values(E.ID,E.NAME,E.AGE,E.SE) ;
--結果3:
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
6695 Lu 12 female
6720 Ka 22 female
1202 lili 30 female
當既滿足on條件又滿足update中的where條件時,delete陳述句執行了。。。。
為了確保萬一,我們驗證一下不滿足update中where條件的情況:
--測驗4:
MERGE INTO t1 b
USING t2 e
ON (b.ID = e.ID)
WHEN MATCHED THEN
update
set b.NAME = E.NAME,
b.AGE = E.AGE,
b.SE = E.SE
where b.id<>'1201'
delete where (b.name = 'Peter')
WHEN NOT MATCHED THEN
insert (b.ID,b.NAME,b.AGE,b.SE)
values(E.ID,E.NAME,E.AGE,E.SE) ;
--結果4:
SQL> select * from t1;
ID NAME AGE SE
---------- -------------------- ---------- --------------------
6695 Lu 12 female
6720 Ka 22 female
1201 Peter 23 male
1202 lili 30 female
**桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......
我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......
關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......