Оператор MERGE — это мощный инструмент в SQL, который позволяет обновлять, вставлять или удалять несколько строк за один вызов. Он особенно полезен для обработки данных из нескольких таблиц или для обновления существующих данных в таблицах. В этой статье мы рассмотрим, как использовать оператор MERGE с примерами из реального мира.
Синтаксис оператора MERGE
Синтаксис оператора MERGE выглядит следующим образом:
MERGE INTO таблица_назначения
USING таблица_объединения
ON (условие_объединения)
WHEN MATCHED THEN
UPDATE SET столбец1 = новое_значение1, столбец2 = новое_значение2
WHEN NOT MATCHED THEN
INSERT (столбец1, столбец2, ...) VALUES (значение1, значение2, ...)
Когда использовать оператор MERGE
Оператор MERGE полезен в различных сценариях, в том числе:
Пример 1: Обновление таблицы с помощью другой таблицы
Допустим, у нас есть две таблицы: customers
(существующая таблица с информацией о клиентах) и new_customers
(таблица с обновленными данными о клиентах). Мы хотим обновить таблицу customers
данными из таблицы new_customers
, если они соответствуют определенному условию.
MERGE INTO customers
USING new_customers
ON (customers.id = new_customers.id)
WHEN MATCHED THEN
UPDATE SET name = new_customers.name, email = new_customers.email
В этом примере оператор MERGE будет обновлять записи в таблице customers
данными из таблицы new_customers
, если значения столбца id
в обеих таблицах совпадают.
Пример 2: Вставка и обновление таблицы
Допустим, у нас есть таблица products
, содержащая данные о продуктах. Мы хотим вставить новые продукты и обновить существующие данные, если они уже есть в таблице.
MERGE INTO products
USING new_products
ON (products.product_id = new_products.product_id)
WHEN MATCHED THEN
UPDATE SET name = new_products.name, price = new_products.price
WHEN NOT MATCHED THEN
INSERT (product_id, name, price) VALUES (new_products.id, new_products.name, new_products.price)
В этом примере оператор MERGE будет обновлять данные о существующих продуктах, если они совпадают по product_id
, и вставлять новые продукты, если они не найдены.
Пример 3: Удаление записей
Допустим, у нас есть таблица orders
, содержащая данные о заказах клиентов. Мы хотим удалить все заказы, которые были сделаны более года назад.
MERGE INTO orders
USING temp_orders
ON (orders.order_id = temp_orders.order_id)
WHEN MATCHED AND temp_orders.order_date < DATE('now', '-1 year') THEN
DELETE
В этом примере оператор MERGE будет удалять записи из таблицы orders
, если соответствующие записи в таблице temp_orders
имеют значение столбца order_date
больше года назад.
Заключение
Оператор MERGE — это мощный инструмент в SQL, который позволяет легко обновлять, вставлять и удалять данные в таблицах. Он особенно полезен, когда необходимо работать с данными из нескольких таблиц или обновлять существующие данные. Понимание синтаксиса и примеров использования оператора MERGE может значительно упростить задачи по управлению данными в SQL.