SQL

SQL_조건부 데이터 변경(MERGE)

S_pot 2021. 5. 31. 15:45
-- 멤버테이블을 정의하고, 데이터 입력
USE sqlDB;
SELECT userID, name, addr INTO memberTBL FROM userTbl;
SELECT * FROM memberTBL;

-- 변경테이블을 정의하고 데이터 입력
CREATE TABLE changeTBL
( changeType NCHAR(4), -- 변경사유
  userID char(8),
  name	 nvarchar(10),
  addr   nchar(2)		);
  GO
  INSERT INTO changeTBL VALUES
  ('신규가입', 'CHO', '초아', '미국'),
  ('주소변경', 'LSG', 'null', '제주'),
  ('주소변경', 'LJB', 'null', '영국'),
  ('회원탈퇴', 'BBK', 'null', 'null'),
  ('회원탈퇴', 'SSK', 'null', 'null');


-- MERGE: 사본을 원본 테이블에 삽입하는 것
  -- 멤버테이블에 변경테이블 데이터를 적용하는 것
MERGE memberTBL AS M -- 변경될 테이블
	USING ChangeTBL AS C -- 변경할 기준이 되는 테이블
	ON M.userID = C.userID -- userID를 기준으로 두 테이블을 비교한다.
	
	-- 일치하는 아이디가 없고, '신규가입'이라면 새로운 행을 추가
	WHEN NOT MATCHED AND changeType = '신규가입' THEN
		-- 추가한다.
		INSERT (userID, name, addr) VALUES(C.userID, C.name, C.addr)
	
	-- 일치하는 아이디가 있고, 사유가 '주소변경'이라면 주소변경
	WHEN MATCHED AND changeType = '주소변경' THEN
		UPDATE SET M.addr = C.addr

	-- 일치하는 아이디가 있고, 사유가 '회원탈퇴'라면 해당 행을 삭제
	WHEN MATCHED AND changeType = '회원탈퇴' THEN
		DELETE;

 

memberTBL

+

changeTBL

=

 

MERGE 후 memberTBL

MERGE된 memberTBL