개발자 끄적끄적

MERGE INTO 본문

MySQL

MERGE INTO

햏치 2023. 3. 12. 16:19

<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