반응형
안녕하세요 투자하는 개발자 투개자입니다.
오늘은 MERGE문에 대해 이야기 해보려합니다.
쿼리를 작성하다보면 A테이블에 UPDATE, INSERT, DELETE 등의 작업을 해야할 경우가 빈번합니다.
하지만 각각의 DML을 하나하나 작성하면 너무너무 비효율 적입니다.
MERGE문은 이런 비효율적인 쿼리를 단일 문으로 대체할 수 있는 방법입니다.
MERGE문 내에서 INSERT, UPDATE, DELETE가 수행되면서 데이터 처리횟수를 줄이고 쿼리 성능을 높일 수 있는 방법입니다.
우선 MERGE문을 사용하기 전의 비효율 적인 쿼리를 보여드리겠습니다.
INSERT INTO 테이블A VALUES(1,'이름','나이','학과') UPDATE 테이블A SET 이름 = '이름2' WHERE NO = 2 DELETE 테이블A WHERE NO = 1 | cs |
MERGE문을 활용하지 않는다면 해당 쿼리들을 하나하나 적성하거나 어떤 이벤트가 발생했을 때, DML을 작성해야한다면
해당 쿼리에 맞게 트리거나 프로시져를 작성해야합니다.
단일 테이블에서만 적용해야하는 DML이라면 프로시져나 트리거를 사용하시는 것이 적합할 수 있습니다.
하지만 테이블A와 테이블B와 비교하면서 DML을 작성할 때는 MERGE문을 사용해 쿼리성능을 향상 할 수 있습니다.
MERGE 변경될테이블 AS 테이블A USING 기준테이블 AS 테이블B ON A.키값 = B.키값 WHEN MATCHED THEN 키값 일치 시 적용쿼리 WHEN NOT MATCHED THEN 불일치 시 | cs |
MERGE 변경될테이블 AS 테이블A USING 기준테이블 AS 테이블B ON A.키값 = B.키값 WHEN MATCHED THEN INSERT (A.컬럼명) VALUES(B.컬럼명) WHEN NOT MATCHED THEN UPDATE SET A.컬럼명 = B.컬럼명 WHEN NOT MATCHED THEN DELETE; | cs |
이런식으로 사용할 수 있는데요. AND 조건을 추가해서 쿼리를 작성하는 것도 가능합니다.
MERGE 변경될테이블 AS 테이블A USING 기준테이블 AS 테이블B ON A.키값 = B.키값 WHEN MATCHED AND 조건컬럼명 = 컬럼값 THEN INSERT (A.컬럼명) VALUES(B.컬럼명) WHEN NOT MATCHED 조건컬럼명 = 컬럼값 THEN UPDATE SET A.컬럼명 = B.컬럼명 WHEN NOT MATCHED THEN DELETE; | cs |
반응형
'DB > MSSQL (SQLSERVER)' 카테고리의 다른 글
[MSSQL] WITH(NOLOCK)이란... (0) | 2020.07.28 |
---|---|
[MSSQL] SERACH PROCEDURE! 특정 단어가 들어간 프로시져 찾기 (0) | 2020.07.28 |
MSSQL 이중화구성 Replication, Log Shipping, Mirroring, Cluster, Always On 방법! (0) | 2020.07.21 |
[MSSQL]테이블 별 ROW 사이즈 추출 - 테이블 별 할당 데이터 사이즈출력 (0) | 2020.07.16 |
[MSSQL] SQL 쿼리 튜닝 -> 조인(JOIN)로 답을 찾자!(NESTED LOOP JOIN (중첩반복),SORT MERGE JOIN (정렬병합),HASH JOIN (해시매치)) (0) | 2020.07.15 |