Освоение операторов слияния SQL: подробное руководство по манипулированию данными

В мире управления базами данных операторы SQL Merge — это мощные инструменты, позволяющие выполнять операции вставки, обновления и удаления в целевой таблице на основе содержимого исходной таблицы. В этой статье представлено подробное руководство по операторам SQL Merge, рассматриваются различные методы и приводятся примеры кода, иллюстрирующие их использование.

Метод 1: базовый оператор SQL Merge
Базовая структура оператора SQL Merge состоит из ключевого слова MERGE, за которым следует целевая таблица, предложения USING для указания исходной таблицы и комбинации WHEN MATCHED и WHEN. Предложения NOT MATCHED для определения желаемых действий. Вот пример:

MERGE INTO target_table AS T
USING source_table AS S
ON T.id = S.id
WHEN MATCHED THEN
    UPDATE SET T.column1 = S.column1, T.column2 = S.column2
WHEN NOT MATCHED THEN
    INSERT (id, column1, column2) VALUES (S.id, S.column1, S.column2);

Метод 2: использование дополнительных условий
Вы можете улучшить базовый оператор SQL Merge, добавив дополнительные условия в предложение ON или предложение WHEN MATCHED. Это позволяет выполнять более сложные обновления или фильтрацию на основе определенных критериев. Вот пример:

MERGE INTO target_table AS T
USING source_table AS S
ON (T.id = S.id AND T.column3 = S.column3)
WHEN MATCHED THEN
    UPDATE SET T.column1 = S.column1
WHEN NOT MATCHED THEN
    INSERT (id, column1) VALUES (S.id, S.column1);

Метод 3: обработка удалений
Операторы SQL Merge также могут обрабатывать удаление записей из целевой таблицы, если они не существуют в исходной таблице. Это достигается добавлением предложения DELETE после предложения WHEN NOT MATCHED. Вот пример:

MERGE INTO target_table AS T
USING source_table AS S
ON T.id = S.id
WHEN MATCHED THEN
    UPDATE SET T.column1 = S.column1
WHEN NOT MATCHED THEN
    INSERT (id, column1) VALUES (S.id, S.column1)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE;

Метод 4: Предложение вывода
Предложение OUTPUT в операторах SQL Merge позволяет фиксировать результаты операции слияния в отдельную таблицу или табличную переменную. Это может быть полезно для целей аудита или отслеживания. Вот пример:

MERGE INTO target_table AS T
USING source_table AS S
ON T.id = S.id
WHEN MATCHED THEN
    UPDATE SET T.column1 = S.column1
WHEN NOT MATCHED THEN
    INSERT (id, column1) VALUES (S.id, S.column1)
OUTPUT $action, inserted.*, deleted.*;

Операторы SQL Merge предоставляют мощный механизм манипулирования данными в реляционных базах данных. Понимая и используя различные доступные методы, вы можете эффективно выполнять операции вставки, обновления и удаления на основе содержимого исходной таблицы. Примеры, приведенные в этой статье, служат отправной точкой для освоения операторов SQL Merge и могут быть адаптированы в соответствии с конкретными требованиями ваших задач управления базой данных.