hyeonga_code
Database_64_DML 응용_MERGE UPSERT 본문
-- Advanced DML
-- MERGE_UPSERT
-- 데이터베이스 테이블에서 조건에 따라 데이터를 갱신하거나 삽입하는 기능을 제공합니다.
-- 해당 행이 존재하는 경우 UPDATE를 수행합니다.
-- 새로운 행일 경우 INSERT를 수행합니다.
-- 테이블에서 행을 갱신하면서 동시에 불필요한 행을 삭제할 수 있습니다.
-- MERGE문의 구문에 포함되는 WHERE 절에 DELETE 절을 작성합니다.
-- 장점
-- 성능이 향상되고 사용하기 편리합니다.
-- 데이터 웨어하우징 응용 프로그램에 유용합니다.
/*
MERGE INTO table_name table_alias
USING ( table | view | sub_query ) alias
ON ( join condirion ) : MERGE 연산이 갱신/삽입을 수행하는 기준이 되는 조건입니다.
WHEN MATCHED THEN : 중복되는 데이터가 있는 경우
UPDATE SET
column 1 = column_val 1,
column 2 = column_val 2
WHEN NOT MATCHED THEN : 중복되는 데이터가 없는 경우
INSERT ( column_list )
VALUES ( collumn_values );
*/
-- 두 개의 테이블을 중복데이터 없이 합치고 싶은 경우
-- 새로운 테이블이 생성되지 않습니다.
-- A 테이블에 B 테이블의 데이터를 붙여넣기 할 수 있습니다.
-- B 테이블에 A 테이블의 데이터를 붙여넣기 할 수 있습니다.
-- 중복되는 데이터가 있는 경우 기준이 되는 값을 저장할 수 있도록 합니다.
-- 실습 준비
DROP TABLE oldemp PURGE;
CREATE TABLE oldemp
AS
SELECT employee_id, last_name,job_id, salary, commission_pct, department_id
FROM employees
WHERE department_id IN (10, 80);
/*
Table OLDEMP이(가) 생성되었습니다.
*/
UPDATE oldemp
SET department_id=200;
/*
7개 행 이(가) 업데이트되었습니다.
*/
UPDATE oldemp
SET commission_pct=0.4;
/*
7개 행 이(가) 업데이트되었습니다.
*/
COMMIT;
/*
커밋 완료.
*/
-- OLDEMP 테이블을 조회합니다.
SELECT * FROM oldemp;
-- OLDEMP 테이블과 EMPLOYEES 테이블을 병합합니다.
MERGE INTO oldemp o
USING employees e
ON (o.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
o.last_name = e.last_name, o.job_id = e.job_id, o.salary = e.salary, o.department_id = e.department_id
DELETE WHERE (e.commission_pct IS NULL)
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.last_name,e.job_id, e.salary, e.commission_pct, e.department_id);
/*
23개 행 이(가) 업데이트되었습니다.
*/
COMMIT;
/*
커밋 완료.
*/
-- 병합한 테이블을 조회합니다.
SELECT *
FROM oldemp
ORDER BY employee_id;
-- 복구합니다.
ROLLBACK;
/*
롤백 완료.
*/
'Oracle Database' 카테고리의 다른 글
Database_66_Subquery 응용_다중 열 서브쿼리, 쌍 비교, 비쌍 비교, 스칼라 서브쿼리, Correlated 상호관련 서브쿼리, EXISTS 연산 (0) | 2023.08.20 |
---|---|
Database_65_DML 응용_FLASHBACK (0) | 2023.08.20 |
Database_63_DML 응용_PIVOTING INSERT (0) | 2023.08.20 |
Database_62_DML 응용_다중 INSERT, 조건 ALL INSERT, 조건 FIRST INSERT (0) | 2023.08.20 |
Database_61_SQL 활용 실습 8 (0) | 2023.08.19 |