개발자 끄적끄적
MERGE INTO 본문
<MERGE INTO>
- 테이블에 데이터가 이미 존재하면 업데이트하고, 존재하지 않으면 입력을 해야하는 경우가 종종 있는데
오라클에서 이런 작업을 한 번에 할 수 있는 쿼리이다
1. 동일한 테이블 구조에서 가지고 있는 B 테이블로부터 데이터를 옮기는 예
MERGE 변경될 테이블명 AS A
USING 기준 테이블 명 AS B
ON A.컬럼명 = B.컬럼명
WHEN MATCHED THEN
일치할 때 쿼리문
WHEN NOT MATCHED THEN
불일치할 때 쿼리문
1.1 추가 조건 지정을 할 때
MARGE 변경될 테이블명 AS A
USING(SELECT 컬럼명 FROM 기준 테이블명) AS B
ON(A.컬럼명 = B컬럼명 AND A.컬럼명 = B.컬럼명)
WHEN MATCHED AND 조건 THEN
INSERT(A.컬럼명) VALUES(B.컬럼명)
WHEN NOT MATCHED AND 조건 THEN
UPDATE SET A.컬럼명 = B.컬럼명
WHEN NOT MATCHED AND 조건 THEN
DELETE;
2. 다른 테이블에서 데이터를 비교하여 가져오는 것이 아니라 직접 값을 넣고자 한다면 DUAL을 사용한다
즉, USING -> DUAL
<예제 SQL - 30회 SQL 기출문제>
MERGE INTO A //A의 테이블을 B의 테이블로부터 데이터를 옮긴다
USING B
ON (A.COL1 = B.COL2) //조건 A의 COL1의 값이 B COL1의 값과 같을 때,
WHEN MATCHED THEN //조건이 일치할 때
UPDATE SET A.COL3 = 4 //A의 COL3의 값을 4로 UPDATE
WHERE A.COL3 = 2 //만약 A테이블의 COL3의 값이 2일 때
DELETE WHERE A.COL3 <=2 //그리고 A테이블의 COL3의 값이 2보다 작을 때 데이터를 삭제한다
WHEN NOT MACHED THEN //조건이 일치하지 않을 때(즉, NOT (A.COL1 = B.COL2))
INSERT(A.COL1, A.COL2, A.CO3) VALUES(B.COL1, B.COL2, B.COL3) //A의 컬럼에 B의 컬럼의 데이터를 넣는다
'MySQL' 카테고리의 다른 글
LPAD, RPAD, LEVEL (0) | 2023.03.12 |
---|---|
Index의 종류와 특징 (0) | 2023.03.12 |
MySQL cmd 관련 명령어 (0) | 2023.03.08 |