SQL MERGE 문 결합하다 끼워 넣다 , 삭제 , 그리고 업데이트 문 하나의 쿼리로.
자바스크립트 연산자
SQL의 MERGE 문
SQL의 MERGE 문은 SQL에서 삽입, 업데이트, 삭제 작업을 수행하는 데 사용됩니다. 대상 테이블 JOIN 결과를 기반으로 소스 테이블 . 이를 통해 사용자는 두 번째 테이블의 결과를 기반으로 한 테이블에서 작업을 수행하여 두 테이블을 동기화할 수 있습니다.
MERGE 문은 지정된 키 필드를 기반으로 원본 테이블과 대상 테이블 간의 데이터를 비교합니다. 새 레코드 삽입, 기존 레코드 업데이트, 소스에 더 이상 존재하지 않는 레코드 삭제 또는 플래그 지정과 같은 적절한 작업을 수행합니다.
이 문은 데이터 변경 사항을 관리하는 유연한 방법을 제공하며 유지 관리와 같은 시나리오에서 일반적으로 사용됩니다. 천천히 변화하는 차원 ( SCD ) 안에 target_table로 병합
source_table 사용
ON merge_condition
일치했을 때
UPDATE SET 컬럼1 = 값1 [, 컬럼2 = 값2 …]
일치하지 않을 때
INSERT(열1 [, 열2 …])
VALUES(값1 [, 값2 …]);
SQL MERGE 문 예
두 개의 테이블이 있다고 가정합니다.
- 상품 목록 이는 각 제품의 ID, 이름 및 가격에 해당하는 P_ID, P_NAME 및 P_PRICE 필드와 함께 사용 가능한 제품에 대한 현재 세부 정보가 포함된 테이블입니다.
- 업데이트_LIST 이는 각 제품의 ID, 이름 및 가격에 해당하는 P_ID, P_NAME 및 P_PRICE 필드와 함께 사용 가능한 제품에 대한 새로운 세부 정보가 포함된 테이블입니다.

작업은 UPDATED_LIST에 따라 PRODUCT_LIST의 제품 세부정보를 업데이트하는 것입니다.
해결책
이제 이 예를 더 잘 설명하기 위해 예를 여러 단계로 나누어 보겠습니다.
1단계: TARGET 및 SOURCE 테이블 인식
따라서 이 예에서는 UPDATED_LIST에 따라 PRODUCT_LIST의 제품을 업데이트하라는 요청을 받았으므로 PRODUCT_LIST는 TARGET 역할을 하고 UPDATED_LIST는 SOURCE 테이블 역할을 합니다.

문자열 json객체
2단계: 수행할 작업을 인식합니다.
이제 TARGET 테이블과 SOURCE 테이블 사이에 세 가지 불일치가 있음을 알 수 있습니다.
1. TARGET의 COFFEE 비용은 15.00이고 SOURCE의 COFFEE 비용은 25.00입니다.
PRODUCT_LIST 102 COFFEE 15.00 UPDATED_LIST 102 COFFEE 25.00>
2. SOURCE에는 BISCUIT 제품이 없지만 TARGET에는 있습니다.
PRODUCT_LIST 103 BISCUIT 20.00>
3. TARGET에는 CHIPS 제품이 없지만 SOURCE에는 있습니다.
UPDATED_LIST 104 CHIPS 22.00>
따라서 위의 불일치에 따라 TARGET에서는 세 가지 작업을 수행해야 합니다. 그들은:
1. 업데이트 작업
102 COFFEE 25.00>
2. 삭제 작업
취소선 마크다운
103 BISCUIT 20.00>
3. INSERT 작업
104 CHIPS 22.00>
3단계: SQL 쿼리 작성
그만큼 SQL 쿼리 위에서 언급한 작업을 수행하기 위해 MERGE 문 이다:
SQL /* Selecting the Target and the Source */ MERGE PRODUCT_LIST AS TARGET USING UPDATE_LIST AS SOURCE /* 1. Performing the UPDATE operation */ /* If the P_ID is same, check for change in P_NAME or P_PRICE */ ON (TARGET.P_ID = SOURCE.P_ID) WHEN MATCHED AND TARGET.P_NAME SOURCE.P_NAME OR TARGET.P_PRICE SOURCE.P_PRICE /* Update the records in TARGET */ THEN UPDATE SET TARGET.P_NAME = SOURCE.P_NAME, TARGET.P_PRICE = SOURCE.P_PRICE /* 2. Performing the INSERT operation */ /* When no records are matched with TARGET table Then insert the records in the target table */ WHEN NOT MATCHED BY TARGET THEN INSERT (P_ID, P_NAME, P_PRICE) VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE) /* 3. Performing the DELETE operation */ /* When no records are matched with SOURCE table Then delete the records from the target table */ WHEN NOT MATCHED BY SOURCE THEN DELETE /* END OF MERGE */>
산출:
PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00 102 COFFEE 25.00 104 CHIPS 22.00>
따라서 이러한 방식으로 MERGE 문의 도움을 받아 SQL에서 이 세 가지 주요 명령문을 모두 수행할 수 있습니다.
메모: MERGE 구문에는 대상 및 소스 이외의 모든 이름을 사용할 수 있습니다. 이는 더 나은 설명을 제공하기 위해서만 사용됩니다.
SQL MERGE 문에 대한 중요 사항
- SQL MERGE 문은 다음을 결합합니다. 끼워 넣다 , 업데이트 , 그리고 삭제 작업을 단일 명령문으로 통합하여 소스 테이블과 대상 테이블 간의 효율적인 데이터 동기화를 가능하게 합니다.
- 단일 트랜잭션에서 여러 데이터 조작 작업을 처리하여 복잡한 SQL 스크립트를 사용자 정의하는 유연성을 제공합니다.
- SQL MERGE 문은 데이터 웨어하우스에서 SCD(Slowly Changing Dimensions)를 유지 관리하는 것과 같은 시나리오에서 일반적으로 사용됩니다.
- 적절한 인덱싱, 최적화된 조인 조건 및 필요한 레코드에 대한 소스 테이블 필터링을 통해 MERGE 문의 성능을 최적화할 수 있습니다.