1. MERGE 란?
하나의 쿼리문으로 데이터 소스와 대상 테이블을 비교해서 데이터를 동기화할 수 있는 기능 제공
=> 조건이 일치하면 UPDATE 혹은 DELETE / 불일치 시 INSERT 를 실행할 수 있는 쿼리
2. MERGE문 사용법
MERGE INTO 변경될 테이블 AS A 테이블의 조건에 따라 UPDATE /DELETE 또는 INSERT 할 테이블
USING 기준 테이블 AS B 비교할 대상 테이블 (❗별칭 필수)
ON A.키값 = B.키값 조건문
WHEN MATCHED THEN
키 값 일치 시 실행할 쿼리 변경될 테이블의 행을 UPDATE 혹은 DELETE
WHEN NOT MATCHED THEN
키 값 불일치 시 실행할 쿼리 변경될 테이블 행에 INSERT
WHEN NOT MATCHED BY SOURCE THEN
실행할 쿼리 변경될 테이블의 행을 UPDATE 혹은 DELETE
; (❗세미클론필수)
✅WHEN MATCHED THEN
A 테이블의 ID와 B테이블의 ID를 기준으로 모두 존재하는 경우,
해당 행은 A 테이블의 행을 UPDATE하거나 DELETE 할 수 있다.
✅WHEN NOT MATCHED THEN
A 테이블에 존재하지 않지만 B 테이블에 존재하는 경우, 해당 행은 A테이블로 INSERT 만 할 수 있다.
✅WHEN NOT MACHED BY SOURCE
A 테이블에는 존재하지만 B테이블에 존재하지 않을 경우, A 테이블의 행을 UPDATE하거나 DELETE 할 수 있다.
쿼리문 형태
- UPDATE SET A.컬럼명,.. = B.컬럼명,...
- DELETE
- INSERT (A.컬럼명,...) VALUES (B.컬럼명,...)
3. MERGE문 사용예제
MENU 임시테이블 생성
CREATE TABLE #MENU(
MENU_ID INT,
NAME VARCHAR(20),
PRICE INT
)
INSERT INTO #MENU(MENU_ID, NAME, PRICE) VALUES (10,'김치찌개',10000)
INSERT INTO #MENU(MENU_ID, NAME, PRICE) VALUES (20,'돈까스',9000)
INSERT INTO #MENU(MENU_ID, NAME, PRICE) VALUES (30,'라면',4000)
INSERT INTO #MENU(MENU_ID, NAME, PRICE) VALUES (40,'된장찌개',5000)
INSERT INTO #MENU(MENU_ID, NAME, PRICE) VALUES (50,'계란말이',8000)
FOOD 임시테이블 생성
CREATE TABLE #FOOD(
FOOD_ID INT,
NAME VARCHAR(20),
PRICE INT
)
INSERT INTO #FOOD(FOOD_ID, NAME, PRICE) VALUES (10,'묵은지 김치찌개',12000)
INSERT INTO #FOOD(FOOD_ID, NAME, PRICE) VALUES (20,'치즈 돈까스',10000)
INSERT INTO #FOOD(FOOD_ID, NAME, PRICE) VALUES (30,'떡 라면',4500)
INSERT INTO #FOOD(FOOD_ID, NAME, PRICE) VALUES (70,'제육볶음',4500)
MERGE 문
MERGE #MENU AS M
USING (
SELECT FOOD_ID,NAME,PRICE
FROM #FOOD
) AS F
ON (M.MENU_ID = F.FOOD_ID)
WHEN MATCHED THEN
UPDATE SET M.MENU_ID = F.FOOD_ID,
M.NAME = F.NAME,
M.PRICE = F.PRICE
WHEN NOT MATCHED THEN
INSERT (MENU_ID,NAME,PRICE)
VALUES(F.FOOD_ID,F.NAME,F.PRICE)
WHEN NOT MATCHED BY SOURCE AND M.MENU_ID =50 THEN
DELETE ;
'MS SQL' 카테고리의 다른 글
MS SQL_IF EXIST문 사용법 (0) | 2022.10.26 |
---|---|
MS SQL_전체 테이블 및 컬럼 조회하는 법 (0) | 2022.10.19 |
MS SQL_문자열 관련 함수 정리2(문자열 합치기, 문자열 자르기, 문자열 치환, 공백 제거) (0) | 2022.09.22 |
MS SQL_문자열 관련 함수 정리1(문자열 자르기, 특정 문자 위치 찾기, 문자열 치환, 공백 제거) (0) | 2022.09.15 |
MS SQL_CURSOR 연산자 사용법 (0) | 2022.09.08 |