標籤:
先看SQL語句:merge into employee e using emps em on (e.emp_id=em.emp_id)
when matched then update set e.emp_name=em.emp_name
when not matched then insert values (em.emp_id,em.emp_name)
1.將emps表中的資料更新到employee表中,以主鍵匹配,如果主鍵匹配就執行update語句,如果不匹配則執行insert語句,需要注意的是,如果emps表中的資料均匹配employee表的資料,則不能寫insert語句,也可以指處理匹配的情況,即沒有when not matched 語句
2.using後邊也可以用視圖或者子查詢,如上邊的例子也可以寫為:
merge into employee e using (select * from emps) em on (e.emp_id=em.emp_id)
when matched then update set e.emp_name=em.emp_name
when not matched then insert values (em.emp_id,em.emp_name)
3.update和insert子句可以加where子句:
merge into employee e using (select * from emps) em on (e.emp_id=em.emp_id)
when matched then update set e.emp_name=em.emp_name where em.emp_name like ‘%張%’
when not matched then insert values (em.emp_id,em.emp_name) where em.emp_name like ‘%張%’
即只添加emps表中含有張的資料
4.update子句後可以跟delete子句刪除一些不需要的資料,delete只能和update子句配合使用
merge into employee e using (select * from emps) em on (e.emp_id=em.emp_id)
when matched then
update set e.emp_name=em.emp_name delete where e.emp_id=em.emp_id where em.emp_name like ‘%張%’
when not matched then insert values (em.emp_id,em.emp_name)
即不更新emps表中含有張字的資料
oracle中merge方法