본문 바로가기
데이터베이스

[DB]두 테이블을 MERGE 하기

by 소금_msg 2021. 10. 2.

MERGE 조건을 비교해서 해당 조건에 맞는 데이터가 없으면 데이터를 삽입하고,

조건에 맞는 데이터가 있으면 기존의 데이터를 수정하는 문장이다.

 

MERGE는 어떤 경우에 쓰일까? 

두개의 테이블의 내용을 비교하여 한쪽에서 다른쪽에 가져오고싶은 데이터가 있을때 사용한다.

A테이블과 B테이블이 있을때 조건에 해당하는 데이터가 있을 경우 수정을, 데이터가 없을 경우 데이터를 입력한다.

 

모든 정보를 가진 테이블, 데이터가 부족한 테이블을 만들어 MERGE로 부족한 데이터를 추가해보자.

 

 

 1. CREATE TABLE로  TABLE_A_CUSTOMER 테이블을 생성한다.

 

CREATE TABLE TABLE_A_CUSTOMER (

CUSTOMER_CD CHAR(7) PRIMARY KEY,
CUSTOMER_NM VARCHAR2(9) NOT NULL,
PHONE_NUMBER VARCHAR2(16)

);

 

 

 

2. INSERTTABLE_A_CUSTOMER 테이블에 데이터를 삽입한다.

 

INSERT INTO TABLE_A_CUSTOMER(customer_cd,customer_nm,phone_number)
VALUES(1372321,’황소윤’,’010-3432-3267’);

INSERT INTO TABLE_A_CUSTOMER(customer_cd,customer_nm,phone_number)
VALUES(1372456,’최정훈’,’010-9843-1247’);

 

 

 

3. TABLE_B_CUSTOMER 테이블을 생성한다.

CREATE TABLE TABLE_B_CUSTOMER (

CUSTOMER_CD CHAR(7) PRIMARY KEY,
CUSTOMER_NM VARCHAR2(9) NOT NULL,
PHONE_NUMBER VARCHAR2(16)

);

 

 

4. TABLE_B_CUSTOMER 테이블에 데이터를 삽입한다.

 

INSERT INTO TABLE_B_CUSTOMER(customer_cd,customer_nm,phone_number)
VALUES(1372321,’황소윤’,’’);


INSERT INTO TABLE_B_CUSTOMER(customer_cd,customer_nm,phone_number)
VALUES(1372456,’최정훈’,’010-9843-1247’);

 

황소윤의 휴대폰 번호는 설정하지 말고 MERGE로 추가해보자.

황소윤 phone_number NULL 설정한다.(비워둔다.) 문자열의 NULL표현은 ’’(작은 따옴표 두개) 한다.

 

 

 

 

5. 두 테이블의 데이터를 확인한다.

 

SELECT*
FROM TABLE_A_CUSTOMER;


SELECT*
FROM TABLE_B_CUSTOMER;

TABLE_A_CUSTOMER에는 황소윤의 전화번호가 있고

TABLE_B_CUSTOMER에는 황소윤의 전화번호가 없다.

 

 

6. 두 테이블을 MERGE 시킨다.

MERGE INTO TABLE_B_CUSTOMER B

    USING TABLE_A_CUSTOMER A
    ON (B.CUSTOMER_CD = A.CUSTOMER_CD)

    WHEN MATCHED THEN
    UPDATE SET B.CUSTOMER_NM = B.CUSTOMER_NM,
                           B.PHONE_NUMBER = A.PHONE_NUMBER

WHEN NOT MATCHED THEN
                          INSERT(B.CUSTOMER_CD,B.CUSTOMER_NM,B.PHONE_NUMBER)
                          VALUES(A.CUSTOMER_CD,A.CUSTOMER_NM,A.PHONE_NUMBER);

 

TABLE_A_CUSTOMER 테이블과 TABLE_B_CUSTOMER 테이블을 비교하여 데이터가 있을 경우 추가하도록 만든다.

 

USING 옆에는 INSER 또는 UPDATE 결과를 쓴다.

ON 옆에는 SELECT 결과와 입력할 테이블의 UNIQUE (중복되지않는다는 ) 연결해준다.

WHEN MATCHED THEN 옆에는 SELECT 결과가 INSERT 테이블에 값이 이미 있다면 UPDATE 실행한다.

WHEN NOT MATCHED THEN 옆에는 ON절에 정한 조건과 맞지 않다면 INSERT 컬럼과 값을 보여준다.

 

7. 추가된 데이터를 확인한다.

SELECT*
FROM TABLE_B_CUSTOMER;

NULL값이었던 황소윤의 전화번호 데이터가 추가되었다.