(새 문서: 좋아요! 이번엔 Oracle SQL에서 자주 사용되는 MERGE 구문에 대해 초보자도 이해할 수 있도록 설명드릴게요. MERGE는 특히 ETL 작업, 데이터 동기화, UPSERT 작업에서 많이 사용돼요. ⸻ 1. MERGE란? 영문 정의 The MERGE statement allows you to conditionally insert or update data in a target table based on the results of a join with a source table. 한글 정의 MERGE는 하나의 SQL 문으로, 대상 테이블에 대해 조...) |
편집 요약 없음 |
||
1번째 줄: | 1번째 줄: | ||
* MERGE는 특히 ETL 작업, 데이터 동기화, UPSERT 작업에서 많이 사용돼요. | |||
⸻ | ⸻ | ||
24번째 줄: | 24번째 줄: | ||
3. 기본 문법 | 3. 기본 문법 | ||
<source lang=sql> | |||
MERGE INTO 대상테이블 t | MERGE INTO 대상테이블 t | ||
USING 원본테이블 s | USING 원본테이블 s | ||
33번째 줄: | 33번째 줄: | ||
INSERT (컬럼1, 컬럼2, ...) | INSERT (컬럼1, 컬럼2, ...) | ||
VALUES (s.컬럼1, s.컬럼2, ...); | VALUES (s.컬럼1, s.컬럼2, ...); | ||
</source> | |||
59번째 줄: | 60번째 줄: | ||
MERGE 쿼리 | MERGE 쿼리 | ||
<source lang=sql> | |||
MERGE INTO target_employees t | MERGE INTO target_employees t | ||
USING source_employees s | USING source_employees s | ||
68번째 줄: | 69번째 줄: | ||
INSERT (emp_id, name, salary) | INSERT (emp_id, name, salary) | ||
VALUES (s.emp_id, s.name, s.salary); | VALUES (s.emp_id, s.name, s.salary); | ||
</source> | |||
85번째 줄: | 87번째 줄: | ||
5. 조건 추가 (WHERE 사용) | 5. 조건 추가 (WHERE 사용) | ||
<source lang=sql> | |||
WHEN MATCHED THEN | WHEN MATCHED THEN | ||
UPDATE SET t.salary = s.salary | UPDATE SET t.salary = s.salary | ||
94번째 줄: | 96번째 줄: | ||
VALUES (s.emp_id, s.name, s.salary) | VALUES (s.emp_id, s.name, s.salary) | ||
WHERE s.salary >= 2500; -- 조건 만족할 때만 삽입 | WHERE s.salary >= 2500; -- 조건 만족할 때만 삽입 | ||
</source> | |||
122번째 줄: | 125번째 줄: | ||
• 이력 테이블 관리 등 | • 이력 테이블 관리 등 | ||
[[category:oracle]] |
2025년 5월 13일 (화) 08:21 판
- MERGE는 특히 ETL 작업, 데이터 동기화, UPSERT 작업에서 많이 사용돼요.
⸻
1. MERGE란?
영문 정의
The MERGE statement allows you to conditionally insert or update data in a target table based on the results of a join with a source table.
한글 정의
MERGE는 하나의 SQL 문으로, 대상 테이블에 대해 조건에 따라 INSERT(삽입) 또는 **UPDATE(갱신)**를 할 수 있는 문법입니다. 흔히 “UPSERT” (update + insert)라고 부르기도 해요.
⸻
2. 언제 쓰나? • A 테이블에 B 테이블 데이터를 넣고 싶은데, • 이미 있는 데이터는 UPDATE • 없는 데이터는 INSERT 해야 할 때 • 데이터 동기화, 이력 테이블 관리, 배치 업데이트 등에서 자주 사용
⸻
3. 기본 문법
MERGE INTO 대상테이블 t USING 원본테이블 s ON (t.기준컬럼 = s.기준컬럼) WHEN MATCHED THEN UPDATE SET t.컬럼1 = s.컬럼1, ... WHEN NOT MATCHED THEN INSERT (컬럼1, 컬럼2, ...) VALUES (s.컬럼1, s.컬럼2, ...);
⸻
4. 예제
예제 테이블
대상 테이블: target_employees
emp_id name salary 1 Alice 3000 2 Bob 3200
원본 테이블: source_employees
emp_id name salary 2 Bob 3500 3 Carol 2800
⸻
MERGE 쿼리
MERGE INTO target_employees t USING source_employees s ON (t.emp_id = s.emp_id) WHEN MATCHED THEN UPDATE SET t.salary = s.salary WHEN NOT MATCHED THEN INSERT (emp_id, name, salary) VALUES (s.emp_id, s.name, s.salary);
⸻
실행 결과
emp_id name salary 1 Alice 3000 2 Bob 3500 3 Carol 2800
⸻
5. 조건 추가 (WHERE 사용)
WHEN MATCHED THEN UPDATE SET t.salary = s.salary WHERE s.salary > t.salary -- 조건 만족할 때만 갱신 WHEN NOT MATCHED THEN INSERT (emp_id, name, salary) VALUES (s.emp_id, s.name, s.salary) WHERE s.salary >= 2500; -- 조건 만족할 때만 삽입
⸻
6. 장점 요약
장점 설명 한 문장으로 처리 INSERT/UPDATE를 한 쿼리에서 처리 가능 조건부 UPSERT WHEN 절로 상황에 따라 처리 다르게 가능 성능 최적화 가능 JOIN 기반이라 효율적인 데이터 비교가 가능
⸻
7. 주의사항 • MERGE는 DELETE도 처리 가능하지만, 사용 시 주의 필요 • 트리거나 제약조건이 있는 테이블에서는 충돌 가능성 있음 • 대상 테이블과 원본 테이블은 충분히 식별 가능한 기준 컬럼으로 JOIN 해야 함
⸻
원하시면 MERGE를 사용하는 실전 시나리오도 알려드릴 수 있어요. 예를 들어: • 일일 매출 데이터를 기준 테이블에 합치기 • 회원 테이블 동기화 • 이력 테이블 관리 등