Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
РКН: https://clck.ru/3QREBc
Post #1483
2.02K
MERGE: атомарная вставка или обновление!
Оператор
Создаём таблицу:
Подготавливаем входящие данные с помощью
Здесь мы формируем набор входных данных, который будет использован оператором
Теперь выполняем
Операция выполняется одной DML-командой, что исключает необходимость выполнять отдельный
Проверяем результат:
🔥 Пример выше предназначен для
➡️ SQL Ready | #практика
Оператор
MERGE позволяет реализовать обновление данных и вставку новых записей в рамках одной операции. Это особенно важно при обработке данных, поступающих из внешних систем, где часть ключей может совпадать, а часть — быть новыми.Создаём таблицу:
CREATE TABLE clients (
id NUMBER PRIMARY KEY,
name VARCHAR2(200) NOT NULL,
email VARCHAR2(200) UNIQUE NOT NULL,
updated_at DATE DEFAULT SYSDATE NOT NULL
);
Подготавливаем входящие данные с помощью
CTE:WITH incoming AS (
SELECT 10 AS id,
'Ivan Petrov' AS name,
'ivan@example.com' AS email
FROM dual
)
Здесь мы формируем набор входных данных, который будет использован оператором
MERGE как источник.Теперь выполняем
MERGE, используя CTE как таблицу-источник:MERGE INTO clients c
USING incoming i
ON (c.id = i.id)
WHEN MATCHED THEN
UPDATE SET
c.name = i.name,
c.email = i.email,
c.updated_at = SYSDATE
WHEN NOT MATCHED THEN
INSERT (id, name, email, updated_at)
VALUES (i.id, i.name, i.email, SYSDATE);
Операция выполняется одной DML-командой, что исключает необходимость выполнять отдельный
SELECT.Проверяем результат:
SELECT * FROM clients WHERE id = 10;
🔥 Пример выше предназначен для
Oracle. Оператор MERGE также поддерживается в SQL Server, DB2, Snowflake, BigQuery и PostgreSQL 15+. Синтаксис в разных СУБД может отличаться.➡️ SQL Ready | #практика
- 👍 13
- ❤ 7
- 🤝 7

















