SQL MERGE Statement combines INSERT, DELETE, and UPDATE statements into one single query.
MERGE Statement in SQL
MERGE statement in SQL is used to perform insert, update, and delete operations on a target table based on the results of JOIN with a source table. This allows users to synchronize two tables by performing operations on one table based on results from the second table.
The MERGE statement compares data between a source table and a target table based on specified key fields. It performs appropriate actions like inserting new records, updating existing ones, and deleting or flagging records no longer present in the source.
This statement provides a flexible way to manage data changes and is commonly used in scenarios like maintaining Slowly Changing Dimensions (SCD) in data warehouses.
Syntax
MERGE INTO target_table
USING source_table
ON merge_condition
WHEN MATCHED THEN
UPDATE SET column1 = value1 [, column2 = value2 ...]
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...])
VALUES (value1 [, value2 ...]);
SQL MERGE Statement Example
Suppose there are two tables:
- PRODUCT_LIST which is the table that contains the current details about the products available with fields P_ID, P_NAME, and P_PRICE corresponding to the ID, name, and price of each product.
- UPDATED_LIST which is the table that contains the new details about the products available with fields P_ID, P_NAME, and P_PRICE corresponding to the ID, name, and price of each product.

The task is to update the details of the products in the PRODUCT_LIST as per the UPDATED_LIST.
Solution
Now in order to explain this example better, let's split the example into steps.
Step 1: Recognise the TARGET and the SOURCE table
So in this example, since it is asked to update the products in the PRODUCT_LIST as per the UPDATED_LIST, hence the PRODUCT_LIST will act as the TARGET and UPDATED_LIST will act as the SOURCE table.

Step 2: Recognise the operations to be performed.
Now as it can be seen that there are three mismatches between the TARGET and the SOURCE table, which are:
1. The cost of COFFEE in TARGET is 15.00 while in SOURCE it is 25.00
PRODUCT_LIST
102 COFFEE 15.00
UPDATED_LIST
102 COFFEE 25.00
2. There is no BISCUIT product in SOURCE but it is in TARGET
PRODUCT_LIST
103 BISCUIT 20.00
3. There is no CHIPS product in TARGET but it is in SOURCE
UPDATED_LIST
104 CHIPS 22.00
Therefore, three operations need to be done in the TARGET according to the above discrepancies. They are:
1. UPDATE operation
102 COFFEE 25.00
2. DELETE operation
103 BISCUIT 20.00
3. INSERT operation
104 CHIPS 22.00
Step 3: Write the SQL Query
The SQL query to perform the above-mentioned operations with the help of the MERGE statement is:
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 */
Output:
PRODUCT_LIST
P_ID P_NAME P_PRICE
101 TEA 10.00
102 COFFEE 25.00
104 CHIPS 22.00
So, in this way, we can perform all these three main statements in SQL together with the help of the MERGE statement.
Note: Any name other than target and source can be used in the MERGE syntax. They are used only to give you a better explanation.
Important Points About SQL MERGE Statement
- The SQL MERGE statement combines INSERT, UPDATE, and DELETE operations into a single statement, allowing for efficient data synchronization between source and target tables.
- It provides flexibility in customizing complex SQL scripts by handling multiple data manipulation operations in a single transaction.
- The SQL MERGE statement is commonly used in scenarios like maintaining Slowly Changing Dimensions (SCD) in data warehouses.
- Proper indexing, optimized join conditions, and filtering the source table for necessary records can optimize the performance of the MERGE statement.
Similar Reads
SQL Interview Questions Are you preparing for a SQL interview? SQL is a standard database language used for accessing and manipulating data in databases. It stands for Structured Query Language and was developed by IBM in the 1970's, SQL allows us to create, read, update, and delete data with simple yet effective commands.
15+ min read
SQL Tutorial Structured Query Language (SQL) is the standard language used to interact with relational databases. Whether you want to create, delete, update or read data, SQL provides the structure and commands to perform these operations. SQL is widely supported across various database systems like MySQL, Oracl
8 min read
SQL Commands | DDL, DQL, DML, DCL and TCL Commands SQL commands are crucial for managing databases effectively. These commands are divided into categories such as Data Definition Language (DDL), Data Manipulation Language (DML), Data Control Language (DCL), Data Query Language (DQL), and Transaction Control Language (TCL). In this article, we will e
7 min read
SQL Joins (Inner, Left, Right and Full Join) SQL joins are fundamental tools for combining data from multiple tables in relational databases. Joins allow efficient data retrieval, which is essential for generating meaningful observations and solving complex business queries. Understanding SQL join types, such as INNER JOIN, LEFT JOIN, RIGHT JO
5 min read
SQL Query Interview Questions SQL or Structured Query Language, is the standard language for managing and manipulating relational databases such as MySQL, Oracle, and PostgreSQL. It serves as a powerful tool for efficiently handling data whether retrieving specific data points, performing complex analysis, or modifying database
15+ min read
CTE in SQL In SQL, a Common Table Expression (CTE) is an essential tool for simplifying complex queries and making them more readable. By defining temporary result sets that can be referenced multiple times, a CTE in SQL allows developers to break down complicated logic into manageable parts. CTEs help with hi
6 min read
Window Functions in SQL SQL window functions are essential for advanced data analysis and database management. It is a type of function that allows us to perform calculations across a specific set of rows related to the current row. These calculations happen within a defined window of data and they are particularly useful
6 min read
SQL | WITH Clause SQL queries can sometimes be complex, especially when you need to deal with multiple nested subqueries, aggregations, and joins. This is where the SQL WITH clause also known as Common Table Expressions (CTEs) comes in to make life easier. The WITH Clause is a powerful tool that simplifies complex SQ
6 min read
SQL Exercises : SQL Practice with Solution for Beginners and Experienced SQL (Structured Query Language) is a powerful and flexible tool for managing and manipulating relational databases. Regardless of our experience level, practising SQL exercises is essential for improving our skills. Regular practice not only enhances our understanding of SQL concepts but also builds
15+ min read
SQL Cheat Sheet ( Basic to Advanced) Creating and managing databases in SQL involves various commands and concepts that handle the structuring, querying, and manipulation of data. In this guide, we will see a comprehensive cheat sheet for essential SQL operations, offering a practical reference for tasks ranging from database creation
15 min read