본문 바로가기

DB/SQL

[SQL] MERGE (Insert, update를 설정)

반응형

 

  • 단일 테이블

 

  • ORACLE

MERGE INTO 타겟테이블  // 결과가 완료되는 테이블
 USING DUAL
      ON (필드1= 비교할 대상)  // 조건
    
    WHEN MATCHED THEN // 존재하면 UPDATE
            UPDATE SET
            타겟_필드1= 'aaa'
            ,타겟_필드2= 'bbb'

    WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
            INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....)
            VALUES(
                'aaa'
                , 'bbb'

                , 'ccc' 

           ); // MERGE문에서는 ; 를 포함
 

 

  • MSSQL

MERGE INTO 타겟테이블  // 결과가 완료되는 테이블
 USING (SELECT 1 AS DUM) X  // 임의로 select문을 선언해야함
      ON (필드1= 비교할 대상)  // 조건
    
    WHEN MATCHED THEN // 존재하면 UPDATE
            UPDATE SET
            타겟_필드1= 'aaa'
            ,타겟_필드2= 'bbb'

    WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
            INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....)
            VALUES(
                'aaa'
                , 'bbb'

                , 'ccc'

            ); // MERGE문에서는 ; 를 포함

 

 

  • 두개의 테이블

MERGE INTO 타겟테이블 A   // 결과가 완료되는 테이블
 USING 소스테이블 B   // 데이터를 가져오는 테이블 또는 쿼리
       ON (A.필드1=B.필드1 AND A.필드2=B.필드2 ....)  // JOIN조건
    
    WHEN MATCHED THEN // 존재하면 UPDATE
            UPDATE SET
            A.타겟_필드1=B.소스_필드1
            ,A.타겟_필드2=B.소스_필드2

    WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
            INSERT (타겟_필드1, 타겟_필드2....) // alias를 사용하지않음 (A.타겟_필드1, A.타겟_필드2 이와같이 사용할경우 문제발생)
            VALUES(
                B.소스_필드1
                , B.소스_필드2
                , B.소스_필드3
            ); // MERGE문에서는 ; 를 포함

 

 

 

 

 

 

반응형

'DB > SQL' 카테고리의 다른 글

[SQL] 속도 개선 TIP  (0) 2019.12.03
[SQL] 소계, 합계구하기 (ROLLUP, GROUPING_ID)  (0) 2019.12.03
[SQL] GROUP BY 개념적 정의  (0) 2019.12.03
[SQL] INDEX 삭제  (0) 2019.12.02
[SQL] 특정 문자만 UPDATE  (0) 2019.12.02