Merging Data with SQL MERGE
3 mins read

Merging Data with SQL MERGE

When working with databases, there may come a time when you need to combine data from different sources or update existing data based on new information. That’s where SQL’s MERGE statement comes into play. The MERGE statement, also known as UPSERT, is a powerful command that allows you to merge two tables by inserting, updating or deleting rows in one table based on conditions met in another table.

Let’s start with a basic understanding of the MERGE command. The MERGE statement is used to make changes in one table based on values matched from another table. Essentially, it takes two tables – the target table (the table that needs to be updated) and the source table (the table containing new data) – and applies INSERT, UPDATE, or DELETE operations accordingly.

The general syntax of the MERGE statement looks like this:

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,...)
WHEN NOT MATCHED BY SOURCE THEN 
    DELETE;

Here’s a step-by-step explanation of what happens in the MERGE statement:

  1. This specifies the condition for the merge. If records from the target and source table meet this condition, it will be considered as ‘MATCHED’.
  2. This part specifies what action should be taken if the records from both tables match. It’s usually an UPDATE operation.
  3. This part specifies what should be done if there’s a record in the source table that doesn’t have a corresponding record in the target table. Typically this would be an INSERT operation.
  4. This is an optional clause that specifies what should be done with records that are in the target table but not in the source table. Usually, this would be a DELETE operation.

Let’s illustrate this with an example. Assume we have two tables: employees (our target table) containing employee information and new_employees (our source table) containing new or updated employee information.

MERGE INTO employees e
USING new_employees ne
ON (e.employee_id = ne.employee_id)
WHEN MATCHED THEN
    UPDATE SET e.salary = ne.salary
WHEN NOT MATCHED THEN 
    INSERT (employee_id, salary)
    VALUES (ne.employee_id, ne.salary);

In this example, if an employee’s ID in the employees table matches an employee’s ID in the new_employees table, then their salary will be updated to reflect the new value from new_employees. If there is an employee in new_employees that does not exist in employees, then that new employee is inserted into employees.

The MERGE statement is very efficient because it performs all these actions in a single pass of both tables. It’s especially useful for keeping data synchronized between tables or for batch updates/inserts based on condition.

Keep in mind that while the MERGE statement is part of the SQL standard, its implementation may vary slightly across different database systems. Always check your specific database documentation for exact syntax and capabilities.

In conclusion, SQL MERGE is a useful tool for any database professional. Understanding MERGE can save you time and ensure your database tables are up to date with the latest data. Always make sure you understand exactly what changes will be made contained within a MERGE statement before running it, especially when it includes a DELETE operation.

Leave a Reply

Your email address will not be published. Required fields are marked *