안녕하세요.
테이블 간의 데이터를 추가할때나 한 테이블에 조건에 맞을 때 update 또는 insert 를 처리하고자
사용하는 MERGE 문 사용방법 정리해 보았습니다.
두개의 테이블을 이용하여 사용하여도 되고, 한 테이블에 조건에 맞을 때만 처리하고자 하면
USING 조건 테이블에 특정 테이블명이 아닌 'DAUL' 로 처리하시면 됩니다.
1> MERGE
여러 테이블의 데이터들을 합치는 병합할 때 사용하는 명령어입니다.
<문법>
1 -- MERGE INTO TABLE명(A)
2 -- USING TABLE명(B)
3 -- ON (병합조건)
4 -- WHEN MATCHED THEN
5 -- UPDATE SET 업데이트 내용
-- (or DELETE WHERE 조건)
6 -- WHEN NOT MATCHED THEN
7 -- INSERT VALUES(컬럼 명)
;
A테이블과 B테이블의 내용을 합쳐서 A테이블에 모으는 명령어입니다.
기준은 3번 병합조건에 따라 조건이 되며,
3번 라인의 ON 조건이 만족하면, A 테이블의 내용은 B 테이블의 내용으로 UPDATE or DELETE 문이 수행되고,
ON 조건이 만족하지 않으면, B 테이블의 내용이 A 테이블로 신규로 INSERT 됩니다.
즉, 무엇인가 원하는 조건일 때만 B의 테이블의 정보를 A테이블에 수정하고, 없으면 신규로 넣을 때 사용하면 됩니다.
(예시, 기존 회원정보테이블에 해당 회원이 없으면 추가(INSERT)하고,
있으면 정보를 수정(UPDATE) 나 삭제(DELETE) 하고자 할 때 사용한다.)
** MERGE 구문에서 주의하실 점은 병합 조건의 처리속도에 따라 전체 쿼리 수행 속도의 영향이 있어
인덱스가 잘 구성되어 있어야 합니다.
<예시>
-- B팀에서 경기수(GAME_COUNT)가 '100'경기이면서 평점(AVG_POINT)이 '8.0' 이상인
선수이면 시간을 현재시간(SYSDATE)로 UPDATE 아니면, 데이터를 INSERT 해준다.
MERGE INTO MANCITY_A_TEAM_TABLE
USING MANCITY_B_TEAM_TABLE
ON (GAME_COUNT = '100' AND AVG_POINT >= '8.0')
WHEN MATCHED THEN
UPDATE SET UPDATE_TIME = SYSDATE
WHEN NOT MATCHED THEN
INSERT
(PLAYER_NAME, AGE, POSITION, GAME_COUNT, AVG_POINT, REGISTER_TIME)
VALUES
(
#{PLAYER_NAME}
,#{AGE}
,#{POSITION}
,'100'
,#{AVG_POINT}
,SYSDATE
)
;
'IT ▶ > Database' 카테고리의 다른 글
[빅데이터 분석] 데이터 시각화 개념과 종류 (Data Visualization) (0) | 2019.10.09 |
---|---|
[DA 전문가 자격] 데이터아키텍처 전문가 DAP 자격증 준비 (0) | 2019.10.04 |
[Data Science] 데이터 과학 & 데이터 분석 개념 (0) | 2019.09.27 |
[데이터베이스 SQL 기본쿼리] COUNT, SUM, AVG, MAX, MIN 함수 쿼리 사용방법 (0) | 2019.09.22 |
데이터베이스 SQL 기본 쿼리 정리 (DML) (0) | 2019.08.28 |