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문 수행
'SQL > Oracle' 카테고리의 다른 글
SQL CRUD(Create, Read, Update, Delete) 중에 뭐가 제일 어려워요? (0) | 2019.12.12 |
---|---|
오라클 JOIN 예제 및 사용방법 (0) | 2019.12.10 |
UNION, UNION ALL 사용법, 예제 & 차이점 (0) | 2019.12.09 |
INNER JOIN, OUTER JOIN(LEFT, RIGHT, FULL) 예제부터 차이까지 (0) | 2019.12.05 |
오라클 NVL, NVL2 사용방법 및 예제 (0) | 2019.10.17 |
댓글