본문 바로가기
SQL/Oracle

오라클 MERGE INTO 사용법 & 예제

by wakestand 2019. 12. 10.
반응형

MERGE INTO는

하나의 테이블 혹은 두 테이블을 가지고 비교해본 뒤에

조건에 맞으면 UPDATE, DELETE를 수행하고 맞지 않으면 INSERT를 수행하게 된다

 

위 테이블을 사용한 예제를 보자면 아래와 같다

 

MERGE INTO 사용할 테이블

USING 비교할 테이블(타 테이블과 비교하지 않을 시에는 DUAL 사용)

ON (비교조건)

WHEN MATCHED THEN(조건에 맞을 시)

UPDATE SET 값 WHERE 조건

DELETE WHERE 조건(작성하지 않아도 됨)

WHEN NOT MATCHED THEN(조건에 맞지 않을 시)

INSERT (컬럼들) VALUES (값들)

 

이런 식으로 사용하는데

간단히 요약해보자면 하나의 테이블 혹은 두 테이블을 가지고 비교해본 뒤(비교한 컬럼명은 UPDATE 불가능)

조건에 맞으면 UPDATE, 혹은 UPDATE 후에 DELETE를 수행할 수 있고

조건에 맞지 않을 시에는 INSERT를 수행하게 된다

 

이제 위 예제를 가지고 수행한 문장을 보자면

 

처음 테이블을 생성했을 당시 TB1에는 김철수란 값이 없었는데

이럴 경우에는 WHEN NOT MATCHED THEN을 타고 TB1에 INSERT를 해서 김철수, 30의 값을 넣게 된다

 

다음으로 동일한 MERGE INTO문을 수행하면

해당 TB1에 김철수란 값이 존재하기 때문에 김철수의 AGE를 50으로 바꾸고

이후 NAME에 김철수가 들어가면 DELETE 시킨다

 

따라서 다시 MERGE를 시키고 조회 시에는 김철수는 삭제되고 3 행만 조회되게 된다

마지막으로 정리해보자면

MERGE INTO란?

 

하나의 테이블 혹은 두 개의 테이블을 비교 후 조건에 맞으면

UPDATE OR UPDATE 후 DELETE를 수행하게 되고 (조건에 사용한 컬럼은 UPDATE 불가능)

조건에 맞지 않으면 INSERT를 수행하게 된다

 

마지막으로 사용한 쿼리는 아래와 같다

 

CREATE TABLE TB1 ( NAME VARCHAR2(20), AGE NUMBER(3) ); -- 테이블 TB1 생성

INSERT INTO TB1(NAME, AGE) VALUES('이영희', 35);
INSERT INTO TB1(NAME, AGE) VALUES('박영수', 40);
INSERT INTO TB1(NAME, AGE) VALUES('엄영수', 40); -- TB1에 값 삽입

MERGE INTO TB1 A       -- 사용할 테이블
USING DUAL             -- 비교할 테이블(테이블 하나만 사용할 경우 DUAL 사용)
ON (A.NAME = '김철수') -- 비교 조건(조건에 사용한 컬럼은 UPDATE 불가능)
	WHEN MATCHED THEN  -- 조건에 맞을 시
		UPDATE SET A.AGE = 50 WHERE A.NAME = '김철수' -- TB1의 해당하는 줄의 AGE를 50으로 변경
		DELETE WHERE A.NAME = '김철수' -- UPDATE 후 DELETE 문(생략 가능)
	WHEN NOT MATCHED THEN -- 조건에 맞지 않을 시
		INSERT (NAME, AGE) VALUES('김철수', 30); -- INSERT문 수행
		
반응형

댓글