차차로그
[ORACLE] MERGE INTO 본문
처음 SQL을 배웠을 때 MERGE 라는 개념이 너무 헷갈리고 어려웠다.
문법도 기존에 사용하던 것과 다르고 복잡해서 잘 안 썼는데
실무에서는 자주 쓰게 된 MERGE 구문
MERGE를 사용하면 하나의 쿼리문에서 UPDATE, INSERT, DELETE를 사용할 수 있어 간단하다
MERGE INTO 문법
MERGE INTO T_TARGET T -- 타겟테이블/뷰
USING T_SOURCE S -- 소스테이블/뷰/서브쿼리
ON (T.ID = S.ID) -- 타겟과 소스의 MATCH를 확인하는 조건
WHEN MATCHED THEN -- 일치하는 경우
UPDATE
SET T.NAME = S.NAME
WHEN NOT MATCHED THEN -- 일치하지 않는 경우
INSERT(T.ID, T.NAME)
VALUES(S.ID, S.NAME)
MERGE의 기본 문법은 이렇다
타겟과 소스가 일치하는지(원하는 데이터가 있는지) 확인하고
일치하는 경우, 일치하지 않는 경우에 따라 DML을 작성하면 된다.
이때 DML의 타겟은 MERGE INTO 뒤에 작성된 테이블/뷰다.
여기서는 T_TARGET 테이블의 데이터가 업데이트되거나, 인서트가 된다.
WHEN MATCHED THEN / WHEN NOT MATCHED THEN은 둘 중 하나만 작성해도 된다.
단일 테이블 사용하는 방법
MERGE INTO T_TARGET T
USING DUAL
ON (T.ID = '123')
WHEN MATCHED THEN
~~~
WHEN NOT MATCHED THEN
~~~
타겟과 소스가 동일한 테이블인 경우 USING에 DUAL을 작성하면 된다.
조인을 사용하는 방법
MERGE INTO T_TARGET T
USING T_SOURCE S
ON (T.ID = S.ID)
WHEN MATCHED THEN
~~~
WHEN NOT MATCHED THEN
~~~
타겟과 소스 테이블이 다를 때 조인을 사용해 MERGE INTO를 할 수 있다.
서브쿼리 사용하는 방법
MERGE INTO T_TARGET T
USING (SELECT A.ID, A.NAME, B.SCORE
FROM TABLE_A A
JOIN TABLE_B B ON A.ID = B.ID
WHERE B.SCORE > 10) S
ON (T.ID = S.ID AND T.SCORE = S.SCORE)
WHEN MATCHED THEN
~~~
WHEN NOT MATCHED THEN
~~~
소스는 테이블,뷰 그리고 서브쿼리가 올 수 있다
서브쿼리와 조인을 해서 MERGE할 수도 있다
WHERE 사용하는 방법
MERGE INTO T_TARGET T
USING DUAL
ON (T.ID = '123')
WHEN MATCHED THEN
UPDATE
SET T.POINT = 20
WHERE T.NAME LIKE '김%'
오라클 10g부터 UPDATE, DELETE 문에 WHERE절을 사용할 수 있다
INSERT에서 WHERE 사용 시 오류가 발생하는 점 주의
DELETE 사용하는 방법
MERGE INTO T_TARGET T
USING DUAL
ON (T.ID = '123')
WHEN NOT MATCHED THEN
DELETE
WHERE T.NAME LIKE '김%'
오라클 10g부터 DELETE 사용이 가능하다.
WHERE 조건없이 DELETE만 사용하면 해당 데이터가 모두 삭제된다.
참고페이지
'SQL' 카테고리의 다른 글
MSSQL 참고 (0) | 2025.04.25 |
---|---|
[ORACLE] PL/SQL (0) | 2024.04.05 |
프로시저 (0) | 2022.08.05 |
데이터베이스 언어 DDL, DML, DCL, TCL (0) | 2022.07.29 |
Comments