본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]MERGE(머지)문으로 INSERT/UPDATE 한번에 하기

by 빛과 어둠사이 2020. 1. 29.
728x90
반응형
SMALL

이번에는 SQL SERVER에서의 

MERGE 문에 대해서

정리를 해보려고 합니다.


MERGE 문은 

위 제목에서와 마찬가지로,

INSERT / UPDATE 등을

한번에 할 수 있는 쿼리입니다.


보통 SELECT 를 해서,

결과값이 있으면

UPDATE를 하고,

없으면 INSERT를 하게끔 

많이 사용을 하셨을 것입니다.


이러한 작업을 

MS-SQL에서 자체적으로 하도록

하나의 쿼리로 작성을 한 것이라고 생각을 하시면 되십니다.


일반적으로 머지문은

2개 이상의 테이블에서의 조건으로

많이 나오고 있습니다.


그런데 저는 개인적으로 한개의

단독 테이블에서 데이터가 있으면 UPDATE

없으면 INSERT를 한 경우가 많아서

하나의 테이블일 때의 상황으로

정리를 해 보도록 하겠습니다.


머지문에 대한

기본적인 사용법은 다음과 같습니다.

MERGE INTO 타겟테이블  --INSERT/UPDATE 할 테이블
 USING (SELECT 1 AS DUM) X 
      ON (필드1= 비교할 대상) --조건
    WHEN MATCHED THEN --위 조건에 맞는 데이터가 있으면 UPDATE
            UPDATE SET
            타겟_필드1= 'AAA'
            ,타겟_필드2= 'BBB'
    WHEN NOT MATCHED THEN --위 조건에 맞는 데이터가 없으면 INSERT
            INSERT (타겟_필드1, 타겟_필드2..)
            VALUES(
                'AAA'
                , 'BBB'

            ); -- MERGE문에서는 ; 를 꼭 넣어야 함

위처럼 하면 됩니다.


WHEN MATCHED THEN 의 경우,

데이터가 있을 인 상황입니다.

즉, SELECT를 해서 데이터가 있을 경우입니다.

그렇기 때문에

UPDATE를 하는 것입니다.


그리고 WHEN NOT MATCHED THEN 의 경우,

데이터가 없을 때 입니다.

즉, SELECT해서 결과가 없을 때 입니다.




그리고 한가지 또 중요한 것

머지의 경우,

세미콜론(;)을 꼭 넣어주어야 합니다.

안그러면 에러가 발생이 됩니다.




그러면 이제 실제 예제를 살펴보도록 하겠습니다.

우선 제가 그동안 쓰던

임시테이블을 다시 조회해 보았습니다.


select * from test_member


위처럼 조회를 하였습니다.

그랬더니 결과는 다음과 같습니다.



위처럼 9개의 데이터가 있는 것으로

확인이 되었습니다.



그러면 이제 MERGE 문을 사용해보도록 하겠습니다.

우선, 데이터가 있어서

UPDATE가 되도록 하는

MERGE문부터 작성해보도록 하겠습니다.

MERGE INTO test_member  --INSERT/UPDATE 할 테이블
 USING (SELECT 1 AS DUM) X 
      ON (id= 'hhh') --조건
    WHEN MATCHED THEN --위 조건에 맞는 데이터가 있으면 UPDATE
            UPDATE SET
            member_name = '태연'
    WHEN NOT MATCHED THEN --위 조건에 맞는 데이터가 없으면 INSERT
            INSERT (id, member_name)
            VALUES(
                'jjj'
                , '송준기'

            ); -- MERGE문에서는 ; 를 꼭 넣어야 함

위처럼 작성을 하였습니다.


id가 hhh인 데이터가 있으면

UPDATE를 하고,

없으면 INSERT를 하는 쿼리입니다.


위처럼 작성하여 실행을 하였습니다.

그랬더니 결과는 다음과 같이 나왔습니다.



위처럼 1개 행이 적용 되었다고

나와지네요.



그러면 이제 SELECT를 통해

다시 데이터를 확인해보도록 하겠습니다.


select * from test_member

위처럼 다시 확인을 하였습니다.

그랬더니 결과는 다음과 같이 나옵니다.




위처럼 id가 hhh인 데이터에서

member_name 값이

하늬에서 태연으로 바뀐 것을

확인할 수 있었습니다.




그러면 이번에는 INSERT 하는 머지문을

만들어 보도록 하겠습니다.

MERGE INTO test_member  --INSERT/UPDATE 할 테이블
 USING (SELECT 1 AS DUM) X 
      ON (id= 'hhh1') --조건
    WHEN MATCHED THEN --위 조건에 맞는 데이터가 있으면 UPDATE
            UPDATE SET
            member_name = '태연'
    WHEN NOT MATCHED THEN --위 조건에 맞는 데이터가 없으면 INSERT
            INSERT (id, member_name)
            VALUES(
                'jjj'
                , '송준기'

            ); -- MERGE문에서는 ; 를 꼭 넣어야 함

위처럼 작성을 하였습니다.


위 쿼리는 id가 hhh1인 데이터가 있으면

UPDATE를 하고,

없으면 INSERT를 하는 쿼리입니다.


위에 이미지처럼 hhh1은 없기 때문에

INSERT를 하게 될 것입니다.


실행을 해 보았습니다.

그랬더니 결과는 다음과 같습니다.



위처럼 1개 행이 적용 되었다고

나와지네요.



그러면 이제 실제 데이터가

어떻게 들어가져있는지

확인해보도록 하겠습니다.


select * from test_member


위처럼 해서

실행을 해 보았습니다.


그랬더니 결과는 다음과 같이 나왔습니다.



위처럼 jjj/ 송준기

이런 데이터가 입력이 된 것을

확인할 수 있습니다.





이와 같이 MERGE문을 이용하여

한번에 UPDATE / INSERT 등을 할 수 있습니다.

또한 더 잘 사용하면

여러 조건에 따른 방법도 처리할 수 있습니다.

그리고 여러 UPDATE문,

DELETE문도 실행을 할 수 있습니다.



이런 방법은

추후에 다시 정리를 해 보도록 하겠습니다.



우선 이번에는

기본적인 머지문에 대한

사용법을 정리해 보았습니다.

이러한 MERGE문을 이용하여

편하게 쿼리를 작성할 수 있으실 겁니다.





이상으로 SQL SERVER에서의 MERGE문에 대한

사용법이였습니다~



728x90
반응형
LIST