본문 바로가기
oracle

Oracle의 MERGE 문과 유사한 기능을 MariaDB, MySQL, MSSQL에서 구현하는 방법

by chunkind 2024. 5. 25.
반응형

데이터베이스에서 조건에 따라 데이터를 업데이트하거나 삽입하는 작업은 매우 일반적입니다. 각 데이터베이스 시스템은 이러한 작업을 수행하기 위한 고유한 구문을 제공합니다.

 

이 글에서는 Oracle, MariaDB, MySQL, MSSQL에서 MERGE 문 또는 유사한 기능을 구현하는 방법을 예제와 함께 설명합니다.

Oracle: MERGE 문

Oracle에서는 MERGE 문을 사용하여 조건에 따라 데이터를 업데이트하거나 삽입할 수 있습니다.

예제:

MERGE INTO target_table tgt
USING source_table src
ON (tgt.id = src.id)
WHEN MATCHED THEN
    UPDATE SET tgt.name = src.name,
               tgt.value = src.value
WHEN NOT MATCHED THEN
    INSERT (tgt.id, tgt.name, tgt.value)
    VALUES (src.id, src.name, src.value);

 

위 구문은 다음을 수행합니다:

 

target_table의 id가 source_table의 id와 일치하면 해당 행을 업데이트합니다.

일치하지 않으면 새로운 행을 삽입합니다.

 

MariaDB 및 MySQL: INSERT ... ON DUPLICATE KEY UPDATE

MariaDB와 MySQL에서는 INSERT ... ON DUPLICATE KEY UPDATE 문을 사용하여 동일한 기능을 구현할 수 있습니다.

테이블 생성 및 데이터 삽입:

CREATE TABLE source_table (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    value INT
);

CREATE TABLE target_table (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    value INT
);

INSERT INTO source_table (id, name, value) VALUES (1, 'Alice', 10);
INSERT INTO source_table (id, name, value) VALUES (2, 'Bob', 20);
INSERT INTO source_table (id, name, value) VALUES (3, 'Charlie', 30);

INSERT INTO target_table (id, name, value) VALUES (1, 'Alice', 5);
INSERT INTO target_table (id, name, value) VALUES (4, 'David', 40);

 

데이터 병합:

INSERT INTO target_table (id, name, value)
SELECT id, name, value FROM source_table
ON DUPLICATE KEY UPDATE
    name = VALUES(name),
    value = VALUES(value);

 

위 구문은 다음을 수행합니다:

 

target_table의 id가 source_table의 id와 일치하면 해당 행을 업데이트합니다.

일치하지 않으면 새로운 행을 삽입합니다.

MSSQL: MERGE 문

MSSQL에서는 Oracle과 유사한 MERGE 문을 사용합니다.

 

테이블 생성 및 데이터 삽입:

CREATE TABLE source_table (
    id INT PRIMARY KEY,
    name NVARCHAR(50),
    value INT
);

CREATE TABLE target_table (
    id INT PRIMARY KEY,
    name NVARCHAR(50),
    value INT
);

INSERT INTO source_table (id, name, value) VALUES (1, 'Alice', 10);
INSERT INTO source_table (id, name, value) VALUES (2, 'Bob', 20);
INSERT INTO source_table (id, name, value) VALUES (3, 'Charlie', 30);

INSERT INTO target_table (id, name, value) VALUES (1, 'Alice', 5);
INSERT INTO target_table (id, name, value) VALUES (4, 'David', 40);

 

데이터 병합:

MERGE target_table AS tgt
USING source_table AS src
ON tgt.id = src.id
WHEN MATCHED THEN
    UPDATE SET tgt.name = src.name,
               tgt.value = src.value
WHEN NOT MATCHED BY TARGET THEN
    INSERT (id, name, value)
    VALUES (src.id, src.name, src.value);

 

 

위 구문은 다음을 수행합니다:

 

target_table의 id가 source_table의 id와 일치하면 해당 행을 업데이트합니다.

일치하지 않으면 새로운 행을 삽입합니다.

요약

Oracle, MariaDB, MySQL, MSSQL에서 조건에 따라 데이터를 업데이트하거나 삽입하는 방법을 정리하면 다음과 같습니다

Oracle: MERGE 문 사용.
MariaDB/MySQL: INSERT ... ON DUPLICATE KEY UPDATE 문 사용.
MSSQL: MERGE 문 사용.

각 데이터베이스 시스템에 맞는 구문을 참고하여 데이터를 효율적으로 병합하세요.

반응형