이번에는 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문에 대한
사용법이였습니다~
'컴퓨터관련 > MS-SQL' 카테고리의 다른 글
[MS-SQL]COUNT 기본 사용 및 응용사용(조건,중복제거) (0) | 2020.02.12 |
---|---|
[MS-SQL]MERGE로 다중조건 UPDATE,INSERT,DELETE 하기 (0) | 2020.02.07 |
[MS-SQL]Korean_Wansung_CS_AS 과(와) Korean_Wansung_CI_AS 에러 발생시 (0) | 2019.12.23 |
[MS-SQL]날짜(DATE)형 형변환 (0) | 2019.11.29 |
[MS-SQL]쿼리(스크립트)를 이용하여 함수리스트 가져오기 (0) | 2019.10.17 |