보통 이런 경험을 해본 적 있을 것이다.
게임 캐릭터를 삭제했는데, 그 삭제 결과가 바로 반영되지 않고, 일주일 뒤에 반영되거나 하는 그런 경험 말이다.
실제로 Merge 기능을 사용하면 이러한 로직을 구현할 수 있다.
아래 테이블을 보자.
총 10명의 회원정보가 있다.
만약에 이 상황에서 1명은 신규가입을 하고, 2명은 주소변경을 하고, 2명은 회원 탈퇴를 한다고 가정하자.
그런데 내 웹사이트에서는 결과를 바로 반영하지 않고 일주일 뒤에 반영한다고 할때는 MERGE를 이용해주면 된다.
아래 SQL을 보자.
일단 변경된 정보를 담는 테이블 만들었다.
CREATE TABLE changeInfoTbl
( changeType NCHAR(4),
userID char(8),
name nvarchar(10),
addr nchar(2) );
여기서 changeType은 신규가입, 회원탈퇴, 주소변경 등 회원정보 변경 상태를 의미한다.
INSERT INTO changeInfoTbl VALUES
('신규가입', 'BYO', '강뽀야', '경기'),
('주소변경', 'LSG', NULL, '경남'),
('주소변경', 'YJS', NULL, '서울'),
('회원탈퇴', 'EJW', NULL, NULL),
('회원탈퇴', 'KKH', NULL, NULL) ;
앞서 설명한 상황 처럼 1명 신규가입, 2명 주소변경 2명 회원탈퇴를 하는 정보를 입력했다.
그리고 일주일 뒤 아래 SQL이 수행된다.
MERGE memberTbl AS MT
USING changeInfoTbl CIT
ON MT.userID = CIT.userID
WHEN NOT MATCHED AND changeType = '신규가입' THEN
INSERT (userID, name, addr) VALUES(CIT.userID, CIT.name, CIT.addr)
WHEN MATCHED AND changeType = '주소변경' THEN
UPDATE SET MT.addr = CIT.addr
WHEN MATCHED AND changeType = '회원탈퇴' THEN
DELETE;
SQL 수행 후의 테이블은 데이터는 아래와 같다.
MERGE는 이런식으로 실무에서 많이 쓰이는 방식이니 잘 기억해두도록 하자.
끝.
반응형
'Develop > Database' 카테고리의 다른 글
[MSSQL] 저장 프로시저 (Stored Procedure) 란? (3) | 2022.02.06 |
---|---|
[MSSQL] 변수 활용하기 (0) | 2022.02.03 |
[MSSQL] WITH 절을 이용해 CTE(Common Table Expression) 표현하기 (1) | 2022.02.02 |
[MSSQL] 찾고자 하는 테이블 정보가 기억나지 않을 때 (0) | 2022.02.01 |
[MSSQL] 쿼리로 페이지 처리 기능 구현하기 (0) | 2022.02.01 |
댓글