[SQL] MERGE

SONGB·2023년 7월 28일
0

SQL

목록 보기
9/13

나는 머지 대지 돼지 이다..
나는 마법돼지 핑키를 닮았다.

🎀🐽빈키🐷🎀



사실 나는 그렇게 SQL을 많이 작성하는 편은 아니었던 것 같다..
입사 전 가장 마지막으로 했던 프로젝트는 JPA로 프로젝트를 진행했고 그 외에도 JPA를 사용한 프로젝트들에서는 정말 소수의 쿼리만 JPQL 혹은 NativeQuery 를 이용해 작성했다.


맞다. 원래 말이 길면 껄껄..ㅋㅋㅋㅋ
그냥 오늘의 주제 MERGE도 몰랐다는 이야기를 장황하게 늘어놓고 있눈고얌...


우리 회사는 쿼리문을 약어를 활용해 파일이름을 정한다.
SELECT는 S가 들어있고
UPDATE는 U가...웅앵웅

그러다가 발견하고 말았지. 못 본 척 파일을 닫아야 했는데
M? 어라라 이게 뭐지? 하며 연 순간 MERGE가 튀어나왔따




MERGE

두 개의 테이블을 하나로 병합 시키는 것!

조건에 따라 INSERT, UPDATE, DELETE가 가능하다.



장점👍

  • 조건 지정이 가능하다.
  • 하나의 쿼리 문 내에서 여러 DML(CRUD)를 진행할 수 있다.
  • 데이터에 접근하거나 수정하는 등 횟수가 줄 수 있어 성능 향상을 기대할 수 있다.

단점👎

  • RDBMS 변경 시 처리가 복잡하다.(DB가 변경되어 MERGE가 존재하지 않아 대대적인 소스코드 변경이 필요할 수도 있다.)

코드🛠

대표적인 코드

  MERGE INTO TABLE1 A
  USING TABLE2 B-- 테이블 or 뷰 or 인라인뷰 or 서브쿼리
  ON (
      -- 조건절
  )	-- 해당 값 존재 여부 체크
  WHEN MATCHED THEN 	-- 존재 
  UPDATE SET
       COL = VAL
  WHEN NOT MATCHED THEN 	-- 부재
  INSERT (
      COL
  ) VALUES (
      VAL
  )



단일 테이블

DB2

  MERGE INTO TABLE A
  USING SYSIBM.SYSDUMMY1 ON (A.COL1= VAL1)
  WHEN MATCHED THEN
  UPDATE SET 
      COL1=VAL1,
      COL2=VAL2,
      COL3=VAL3
  WHEN NOT MATCHED THEN
  INSERT (
      COL1,
      COL2,
      COL3
  ) VALUES(
      COL1,
      COL2,
      COL3
  )

ORACLE

  MERGE INTO TABLE A
  USING DUAL ON (A.COL1= VAL1)
  WHEN MATCHED THEN
  UPDATE SET 
      COL1=VAL1,
      COL2=VAL2,
      COL3=VAL3
  WHEN NOT MATCHED THEN
  INSERT (
      COL1,
      COL2,
      COL3
  ) VALUES(
      COL1,
      COL2,
      COL3
  )



내가 본 쿼리문은 단지 존재하는지 여부에 따라 조건이 나뉘고 DB2를 사용했기에 2 번째와 같은 구조를 가지고 있다.





끝~!~!!!~!~!


profile
⚽⚾데굴데굴 굴러가는 내 맘대로 벨로그🏀🏐

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기