ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MERGE
    데이터베이스 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 전문가 가이드 - 한국데이터산업진흥원

    반응형

    '데이터베이스' 카테고리의 다른 글

    유저와 권한  (0) 2021.05.20
    트랜젝션  (0) 2021.05.20
    정규 표현식 (POSIX /PERL)  (0) 2021.05.17
    PIVOT , UNPIVOT  (0) 2021.05.16
    계층형 질의  (0) 2021.05.16
Designed by Tistory.