💡 MERGE문
:조건을 비교해서 테이블에 해당 조건에 맞는 데이터가 없으면 INSERT, 있으면 UPDATE를 수행하는 문장이다.
MERGE INTO 테이블명
USING (비교할 테이블 - 타 테이블과 비교하지 않을 시 DUAL 사용)
ON (update될 조건)
WHEN MATCHED THEN
SET 컬럼1 = 값1 ...
WHEN UPDATE 조건
DELETE WHERE ~
WHEN NOT MATCHED THEN
INSERT 컬럼1, 컬럼2...) VALUES(값1, 값2, ...)
WHERE INSERT 조건;
- USING에서 MERGE INTO 테이블과 동일할 경우 DUAL 사용
👉 단일 테이블 사용법 (DUAL)
MERGE
INTO emp a
USING dual
ON (a.empno = 1111)
WHEN MARCHED THEN
UPDATE
SET a.empno = 1
WHEN NOT MATCHED THEN
INSERT (a.empno, a.ename)
VALUES(1111,'KIM');
👉 조인 사용 방법
MERGE
INTO emp a
USING job b
ON (a.empno = 1111 AND a.empno = b.empno)
WHEN MATCHED THEN
UPDATE
SET a.ename = b.ename,
a.job = b.job
WHEN NOT MATCHED THEN
INSERT (a.empno, a.ename, a.job)
VALUES (b.empno, b.enmae, b.job);
👉 서브쿼리 사용 방법
MERGE
INTO emp a
USING (SELECT aa.empno
, aa.job
, aa.deptno
FROM emp aa
, dept bb
WHERE aa.empno = 1111
AND aa.deptno = bb.deptno) b
ON (a.empno = b.empno)
WHEN MATCHED THEN
UPDATE
SET a.job = b.job
, a.deptno = b.deptno
WHEN NOT MATCHED THEN
INSERT (a.empno, a.job, a.deptno)
VALUES (b.empno, b.job, b.deptno);
👉 WHERE 절 사용
MERGE
INTO emp a
USING dual
ON (a.empno = 1111)
WHEN MATCHED THEN
UPDATE
SET a.job = 'student'
WHERE a.name = 'kim';
👉 주의사항
on 조건절에 사용할 컬럼을 업데이트하면 오류가 발생한다.
=> 되도록 PK로만 비교하자.
'IT > SQL' 카테고리의 다른 글
[SQL] SQL 기본 - DDL, DML, DCL (0) | 2023.01.30 |
---|---|
[SQL] CONNECT BY 사용법 (1) | 2023.01.20 |