
SQLD MERGE 문 구조 INTO·USING·ON, WHEN MATCHED THEN UPDATE·WHEN NOT MATCHED THEN INSERT, DELETE WHERE, 결과 행 계산과 제약 사항 핵심 정리
있으면 UPDATE, 없으면 INSERT를 한 문장으로 처리하는 MERGE를 정리할 차례야
60 · 61 · 62회 모두 MERGE 실행 후 테이블 결과를 고르는 문제가 나왔어
SQLD 기초이론 정리 시리즈 43탄!!!
과목 : 2과목 SQL 기본 및 활용
세부 영역 : 관리 구문 - DML (MERGE)
1. 오늘 사용할 예시 테이블
창고 재고 STOCK(대상)과 오늘 입고 내역 INCOME(원본)이야
| 상품ID | 재고 |
| P1 | 10 |
| P2 | 5 |
| P3 | 0 |
▲ STOCK (대상 테이블)
| 상품ID | 입고 |
| P2 | 20 |
| P3 | 7 |
| P4 | 15 |
▲ INCOME (원본 테이블)
2. MERGE 문 구조
MERGE INTO STOCK S
USING INCOME I
ON (S.상품ID = I.상품ID)
WHEN MATCHED THEN UPDATE SET S.재고 = S.재고 + I.입고
WHEN NOT MATCHED THEN INSERT (상품ID, 재고) VALUES (I.상품ID, I.입고);
| 구성 | 역할 |
| INTO | 변경될 대상 테이블 |
| USING | 비교할 원본 (테이블 · 뷰 · 서브쿼리) |
| ON | 두 테이블을 맞춰보는 조건 (괄호 필수) |
| WHEN MATCHED | ON 조건이 맞는 행 → UPDATE (또는 DELETE) |
| WHEN NOT MATCHED | 원본에만 있는 행 → INSERT |
3. 실행 결과 따라가기
| 상품ID | 처리 | 재고 (실행 후) |
| P1 | INCOME에 없음 → 변화 없음 | 10 |
| P2 | MATCHED → 5 + 20 | 25 |
| P3 | MATCHED → 0 + 7 | 7 |
| P4 | NOT MATCHED → INSERT | 15 |
결과 : 4행 (UPDATE 2건, INSERT 1건)
대상에만 있는 P1은 MERGE가 건드리지 않아
60 · 61 · 62회 출제 포인트 : MERGE 후 특정 상품의 값, 전체 행 수
4. 알아둘 규칙
| 규칙 | 설명 |
| 한쪽 절만 사용 | WHEN MATCHED만 또는 WHEN NOT MATCHED만 써도 됨 |
| UPDATE 뒤 DELETE WHERE | UPDATE된 행 중 조건 맞는 행 삭제 (Oracle) |
| ON 칼럼 수정 불가 | ON 조건에 쓴 칼럼은 UPDATE SET에서 바꿀 수 없음 |
| UPDATE · INSERT에 WHERE | 각 절 안에 WHERE로 조건 추가 가능 |
| 분류 | DML (INSERT · UPDATE · DELETE를 합친 것) |
예) WHEN MATCHED THEN UPDATE SET S.재고 = S.재고 + I.입고 DELETE WHERE S.재고 < 10
→ P2(25) 유지, P3(7) 삭제. P1(10)은 UPDATE 대상이 아니라서 삭제 판단도 안 해
[ 최근 기출 출제 포인트 ]
| 회차 | 출제 포인트 |
| 60회 | MERGE 후 테이블 결과 |
| 61회 | WHEN MATCHED · NOT MATCHED 동작 |
| 62회 | MERGE 결과 행 수, DELETE WHERE |
[ 자주 묻는 질문 ]
Q. 원본에 같은 키가 2건이면?
A. 대상 한 행이 두 번 UPDATE되려 해서 오류가 나. ON 조건으로 1:1 매칭이 되게 해야 해
Q. MERGE도 ROLLBACK 돼?
A. 돼! DML이라 COMMIT 전이면 되돌릴 수 있어
[ 시험 포인트 정리 ]
| 키워드 | 핵심 |
| MATCHED | UPDATE (+ DELETE WHERE) |
| NOT MATCHED | INSERT |
| 대상에만 있는 행 | 변화 없음 |
| ON 칼럼 | UPDATE 불가 |
| MERGE | DML |
[ 기출변형문제 ]
※ 60~62회 출제 포인트와 출제기준을 바탕으로 새로 만든 변형문제야
(위의 STOCK · INCOME 테이블 기준, 각 문항은 원래 데이터에서 시작)
Q1. 2번 본문의 MERGE 실행 후 P2의 재고는?
① 20
② 5
③ 25
④ 15
Q2. 2번 본문의 MERGE 실행 후 STOCK의 전체 행 수는?
① 3행
② 4행
③ 5행
④ 6행
Q3. WHEN NOT MATCHED 절을 빼고 WHEN MATCHED 절만 실행하면 STOCK의 행 수는?
① 3행
② 4행
③ 2행
④ 5행
Q4. WHEN MATCHED 절에 DELETE WHERE S.재고 < 10 을 추가하면 삭제되는 상품은?
① P1
② P2
③ P3
④ P4
Q5. MERGE 문에 대한 설명으로 옳지 않은 것은?
① ON 절에 쓴 칼럼은 UPDATE SET에서 변경할 수 없다
② WHEN MATCHED 절만 단독으로 사용할 수 있다
③ USING 절에는 테이블 · 뷰 · 서브쿼리를 쓸 수 있다
④ MERGE는 DDL에 속한다
[ 정답 & 해설 ]
| 문항 | 정답 및 해설 |
| Q1 | ③ MATCHED → 5 + 20 = 25 (60회 출제 포인트) |
| Q2 | ② 기존 3행 + P4 INSERT 1행 = 4행 (62회 출제 포인트) |
| Q3 | ① INSERT가 없어서 P4는 안 들어감 → 3행 그대로 |
| Q4 | ③ UPDATE된 P2(25), P3(7) 중 10 미만인 P3만 삭제 |
| Q5 | ④ MERGE는 DML이야 |
다음 글에서는 변경을 확정하고 되돌리는
[이론 44] TCL
을 COMMIT · ROLLBACK · SAVEPOINT로 정리해볼게!
▶ SQLD · AI 자격증 스터디 자료 보러가기 (AI DATA 자격증 스터디 클럽)
SQLD 준비하시는 분들 모두 화이팅입니다~~~~~ ^^