데이터베이스에서 조건에 따라 데이터를 업데이트하거나 삽입하는 작업은 매우 일반적입니다. 각 데이터베이스 시스템은 이러한 작업을 수행하기 위한 고유한 구문을 제공합니다.
이 글에서는 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 문 사용.
각 데이터베이스 시스템에 맞는 구문을 참고하여 데이터를 효율적으로 병합하세요.