본문 바로가기
IT ▶/Data

[데이터베이스 SQL 기본쿼리] MERGE() 쿼리 사용방법

by 오프로 2019. 9. 30.

 

 

 

안녕하세요.

 

 

테이블 간의  데이터를 추가할때나 한 테이블에 조건에 맞을 때 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

    )

;

 

 

 

728x90
300x250