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(삽입)도 가능하니 다양하게 쓸 수 있다!
'프로그래밍' 카테고리의 다른 글
오라클 SQL SELECT문, WHERE절 사용방법과 예시 (0) | 2022.03.06 |
---|---|
오라클 SQL 함수 NVL, DECODE 사용방법과 예시 (0) | 2022.03.05 |
ORA-00060 deadlock 에러 (데드락 에러) 원인과 해결🤔 (0) | 2022.02.22 |
INTERNAL ERROR: Failed assertion [PGE Code=90105] 에러 해결 방법🤔 (0) | 2022.02.22 |
Argument count error 발생 원인 및 해결 (1) | 2022.01.05 |