DB/Oracle

Merge SQL을 사용해보자.

seungdols 2015. 8. 9. 23:56



Oracle SQL 공부 중 새로운 SQL Merge문을 소개하려 합니다.

조건을 비교해서 테이블에 해당 조건에 맞는 데이터가 없으면 INSERT , 있으면 UPDATE를 수행하는 문장입니다.



형식 : MERGE 문

MERGE INTO [스키마.]테이블 명

USING (update나 insert 될 데이터원천)

ON (update될 조건)

WHEN MATCHED THEN

SET 컬럽1 = 값1, 컬럭2 = 값2 ...

WHERE  update 조건

DELETE WHERE update_delete 조건

WHEN NOT MATCHED THEN

INSERT (컬럼1,컬럼2,....) VALUES (값1,값2...)

WHERE insert 조건;




일단 데이터는 중요하지 않다. 연습용 테이블이니...(사실 책 예제)


얼추10~12월의 데이터를 삽입한다.



위에서 ex3_3 테이블에 데이터를 삽입한 것과 비교하여, 존재하면 연봉에 0.01 해준다.



사실 여기는 책의 오타인것 같다. 


0.01을 해주어야 하는데 0이 하나 더 들어간 것 같다. 


문장은 매니저번호가 146인 사원의 연봉을 올려주기 위한 select 작업? 이랄까 ??



Merge문은 보면 복잡하지만 나눠서 생각하면 된다. 


일단 나눠서 만약 이 테이블에 146번의 매니저를 가지는 사원이 있다면 = MATCHED 

그 사람의 연봉을 인상해주고, 

만약 존재하지 않다면 = NOT MATCHED 

신규로 삽입을 하되 연봉은 0.1%로 삽입한다.


(서브 쿼리절에서 salary * 0.001 이 부분은 복붙의 결과일뿐 없어야 한다.)



결론적으로는 160번 사원은 7.5로 신규 입력 되었고, 161번의 사원은 70으로 보너스 금액이 갱신 되었다.



쉽게 생각하자. 


이것은 단순히 조회하였을때 , 값이 존재하면 수정을 하는 것이고, 없다면 삽입해주는 문장을 하나로 합친 것이다. 


반응형

'DB > Oracle' 카테고리의 다른 글

Oracle 공부 이야기 - 테이블 스페이스 생성 및 계정 생성  (0) 2015.08.11
Pseudo-Column이란?  (0) 2015.08.11
SQL 이야기 - 검색편  (0) 2015.04.28
Oracle service on/off 방법  (0) 2015.04.28
Oracle developer Error : ora-12505  (0) 2015.04.28