데이터베이스
MERGE
ssseung
2021. 5. 20. 19:20
MERGE 문을 사용하면 새로운 행을 입력하더나, 기존 행을 수정하는 작업을 한 번에 할 수 있다.
MERGE
INTO 타켓 테이블명
USING 소스 테이블명
ON 조인 조건식
WHERE MATCHED THEN
UPDATE
SET 수정할 컬럼 = 수정할 값
WHEN NOT MATCHED THEN
INSERT [(컬럼1,컬럼2..)]
VALUES (값1,값2...);
TEAM_TMP 테이블을 이용해 TEAM 테이블에 정보를 수정/입력한다.
MERGE
INTO TEAM T
USING TEAM_TMP S
ON (T.TEAM_ID = S.TEAM_ID)
WHEN MATCHED THEN
UPDATE
SET T.TEAM_ID= S.TEAM_ID
,T.TEAM_NAME = S.TEAM_NAME
,T.REGION_NAME = S.REGION_NAME
,T.DDD
,T.TEL
WHEN NOT MATCHED THEN
INSERT (T.TEAM_ID,T.REGION_NAME,T.TEAM_NAME,T.STADIUM_ID,T.DDD,T.TEL)
VALUES (S.TEAM_ID,S.REGION_NAME,S.TEAM_NAME,S.STADIUM_ID,S.DDD,S.TEL);
USING 절에 서브쿼리를 사용할 수도 있다.
MERGE
INTO TEAM T
USING (SELECT * FROM TEAM_TMP WHERE REGION_NAME IN ('성남','부산','대구','전주')) S
ON (T.TEAM_ID = S.TEAM_ID)
WHEN MATCHED THEN
UPDATE
SET T.TEAM_ID= S.TEAM_ID
,T.TEAM_NAME = S.TEAM_NAME
,T.REGION_NAME = S.REGION_NAME
,T.DDD
,T.TEL
WHEN NOT MATCHED THEN
INSERT (T.TEAM_ID,T.REGION_NAME,T.TEAM_NAME,T.STADIUM_ID,T.DDD,T.TEL)
VALUES (S.TEAM_ID,S.REGION_NAME,S.TEAM_NAME,S.STADIUM_ID,S.DDD,S.TEL);
최신버전의 ORACLE 과 SQL SERVER 에서는 WHEN MATCHED 절과 WHEN NOT MATCHED 절을 선택적으로 사용할 수도 있다.
MERGE
INTO TEAM T
USING (SELECT * FROM TEAM_TMP WHERE REGION_NAME IN ('성남','부산','대구','전주')) S
ON (T.TEAM_ID = S.TEAM_ID)
WHEN MATCHED THEN
UPDATE
SET T.TEAM_ID= S.TEAM_ID
,T.TEAM_NAME = S.TEAM_NAME
,T.REGION_NAME = S.REGION_NAME
,T.DDD
,T.TEL;
출처
SQL 전문가 가이드 - 한국데이터산업진흥원
반응형