Cracking Code

SQL - MERGE 본문

Database

SQL - MERGE

CrackCo 2020. 7. 20. 19:26
두 개의 테이블을 하나로 합칠 수 있는 MERGE 문에 대해서 알아봅시다.
MERGE INTO table alias
USING table alias
ON (조건절)
WHEN MATCHED THEN
	UPDATE SET
    col1 = col1_value,
    col2 = col2_value,
    ...
WHEN NOT MATCHED THEN
	INSERT (column_list)
    VALUES (column_values);

MERGE는 구조가 같은 2개의 테이블을 비교하여 하나의 테이블로 합치는 데이터 조작어입니다.

행이 이미 존재하면 UPDATE가 실행되고 존재하지 않으면 INSERT가 실행됩니다.

 

MERGE를 실습하기 전에 임시로 테이블을 만들어볼까요?

CREATE TABLE PT_01(
	판매번호 VARCHAR2(8),
    제품번호 NUMBER,
    수량 NUMBER,
    금액 NUMBER
);

CREATE TABLE PT_02(
	판매번호 VARCHAR2(8),
    제품번호 NUMBER,
    수량 NUMBER,
    금액 NUMBER
);

CREATE TABLE P_TOTAL(
	판매번호 VARCHAR2(8),
    제품번호 NUMBER,
    수량 NUMBER,
    금액 NUMBER
);

INSERT INTO PT_01 VALUES('20200101', '1000', 10, 500);
INSERT INTO PT_01 VALUES('20200102', '1001', 10, 400);
INSERT INTO PT_01 VALUES('20200103', '1002', 10, 300);
INSERT INTO PT_02 VALUES('20200201', '1003', 10, 500);
INSERT INTO PT_02 VALUES('20200202', '1004', 10, 400);
INSERT INTO PT_02 VALUES('20200203', '1005', 10, 300);

 

이제 PT_01 테이블과 PT_02 테이블을 P_TOTAL 테이블에 합쳐보겠습니다.

MERGE INTO P_TOTAL TOTAL
USING PT_01 P01
ON (TOTAL.판매번호 = P01.판매번호)
WHEN MATCHED THEN
	UPDATE SET TOTAL.수량 = P01.수량
WHEN NOT MATCHED THEN
	INSERT VALUES(P01.판매번호, P01.제품번호, P01.수량, P01.금액);
    
MERGE INTO P_TOTAL TOTAL
USING PT_02 P02
ON (TOTAL.판매번호 = P02.판매번호)
WHEN MATCHED THEN
	UPDATE SET TOTAL.수량 = P02.수량
WHEN NOT MATCHED THEN
	INSERT VALUES(P02.판매번호, P02.제품번호, P02.수량, P02.금액);

두 개의 테이블이 잘 병합되어 P_TOTAL 테이블에 입력된 모습입니다.

 

THEN 절에는 UPDATE, INSERT 외에 다양한 데이터 조작어를 사용할 수 있습니다.

'Database' 카테고리의 다른 글

SQL - COMMIT, ROLLBACK  (0) 2020.07.20
TRANSACTION 개요  (0) 2020.07.20
SQL - DELETE  (0) 2020.07.20
SQL - UPDATE  (0) 2020.07.20
SQL - INSERT INTO  (0) 2020.07.20
Comments