-
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 전문가 가이드 - 한국데이터산업진흥원
반응형'데이터베이스' 카테고리의 다른 글
유저와 권한 (0) 2021.05.20 트랜젝션 (0) 2021.05.20 정규 표현식 (POSIX /PERL) (0) 2021.05.17 PIVOT , UNPIVOT (0) 2021.05.16 계층형 질의 (0) 2021.05.16