SQL Merge: Combine and Update Data Efficiently
SQL оператор MERGE (соединение) позволяет объединять данные из двух или более таблиц в одну новую, либо обновлять их существующую. MERGE является расширением SQL объединения данных и может быть использован для выполнения операций INSERT, UPDATE и DELETE на основе результатов соединения двух или более таблиц.
Примеры кода:
1. Обновление информации в одной таблице на основе информации из другой таблицы
sql
MERGE INTO employees e
USING temp_employees te
ON (e.employee_id = te.employee_id)
WHEN MATCHED THEN
UPDATE SET e.salary = te.salary
В данном примере, оператор MERGE соединяет две таблицы - employees и temp_employees, используя поля employee_id в качестве ключа соединения. Затем, при совпадении ключей в обеих таблицах, оператор UPDATE обновляет значение поля salary в таблице employees на значение поля salary в таблице temp_employees.
2. Вставка новых строк в таблицу на основе результатов соединения двух таблиц
sql
MERGE INTO sales s
USING product_info pi
ON (s.product_id = pi.product_id)
WHEN NOT MATCHED THEN
INSERT (s.sales_id, s.product_id, s.region, s.amount)
VALUES (SEQ_SALES.nextval, pi.product_id, pi.region, 0)
В данном примере, оператор MERGE соединяет две таблицы - sales и product_info, используя поля product_id в качестве ключа соединения. Затем, если в таблице sales нет строк, соответствующих ключевым значениям таблицы product_info, оператор INSERT добавит новую строку в таблицу sales со значениями поля sales_id, равным следующему значению последовательности SEQ_SALES, поля product_id, полученного из таблицы product_info, поля region, также полученного из таблицы product_info, и поля amount, равному 0.
3. Удаление строк из таблицы на основе результатов соединения двух таблиц
sql
MERGE INTO employees e
USING terminated_employees te
ON (e.employee_id = te.employee_id)
WHEN MATCHED THEN
DELETE
В данном примере, оператор MERGE соединяет две таблицы - employees и terminated_employees, используя поля employee_id в качестве ключа соединения. Затем, если ключевые значения в таблице employees соответствуют значениям в таблице terminated_employees, оператор DELETE удаляет соответствующую строку из таблицы employees.
В заключение, оператор MERGE является мощным инструментом для объединения данных из нескольких таблиц в одну новую, а также для выполнения операций INSERT, UPDATE и DELETE на основе результатов соединения. Код в примерах демонстрирует простые, но сильные возможности MERGE.