프로그래밍

오라클 SQL Merge문(머지문) 사용 방법과 예시

프로그래머 무비스 2022. 3. 3. 22:34
728x90
반응형

Merge문을 자주 사용하지는 않지만 가끔 배치 로직에 사용하고 있다.

원본 테이블과의 조인 결과를 기반으로 대상 테이블에서 INSERT, UPDATE, DELETE 작업을 수행하는 명령어다.
INSERT문, UPDATE문, DELETE문 모두 한문장으로 한테이블 안에서의 데이터변경이 가능하다. 하지만 더 나아가 여러 테이블이 관여되여있는 데이터 변경을 원한다면 MERGE문을 사용하자!

1) Merge문 기본형태

MERGE
INTO
테이블1 T
USING
( 테이블2의 SELECT문 ) S
ON
( T와 S의 조인 조건)
WHEN MATCHED THEN
데이터 변경 실행문

2) 예시
테이블1이 아래와 같이 전체 학생 정보가 있는 테이블이고

이름 학과 나이 장학금명
한철수 수학과 20  
김순자 물리학과 22 미정
박영수 컴퓨터공학과 21  

테이블2가 아래와 같이 학생들의 장학금 정보가 있는 테이블이라고 하자.

이름 장학금명 장학금액수
김순자 성적장학금 1,500,000
박영수 ROTC장학금 1,000,000

 

테이블2에서 장학금명 정보를 갖고와서 
테이블1의 장학금명 컬럼을 채워야한다면 어떤 MERGE문을 만들어야 할까?

MERGE
INTO
테이블1 T
USING
( SELECT 이름, 장학금명
FROM 테이블2
 ) S
ON
( T.이름 = S.이름 )
WHEN MATCHED THEN
UPDATE
SET T.장학금명 = S.장학금명

 

→ 위의 머지문을 설명하자면 아래와 같다.

 

테이블1을 T라고 하고

테이블2의 이름과 장학금명을 끌고 온 데이터를 S라고 했을 때,

T의 이름과 S의 이름이 같은 데이터가 있다면

그 데이터에 한해서 T의 장학금명에 S의 장학금명을 UPDATE(변경)해라.

 

그 결과 테이블1은 아래와 같이 변경된다.

이름 학과 나이 장학금명
한철수 수학과 20  
김순자 물리학과 22 성적장학금
박영수 컴퓨터공학과 21 ROTC장학금

 

WHEN MATCHED THEN 다음에 오는 데이터 변경 실행문은

UPDATE(변경)뿐만 아니라 DELETE(지움), INSERT(삽입)도 가능하니 다양하게 쓸 수 있다!

 

728x90
반응형