O QUE É "MERGE INTO ()"?
- #SQL
O comando merge into () é uma instrução que permite combinar dados de diferentes tabelas em uma única operação. Ele é usado quando você deseja sincronizar dados entre uma tabela de origem e uma tabela de destino, realizando inserções e atualizações conforme o necessário. Isso permite que você atualize registros exigentes e insira novos registros em uma única operação, evitando a necessidade de várias instruções SQL separadas.
A sintaxe geral da instrução merge into é a seguinte:
MERGE INTO tabela_destino AS alvo
USING tabela_origem AS origem
ON condição_de_correspondência
WHEN MATCHED THEN
UPDATE SET coluna1 = valor1, coluna2 = valor2, ...
WHEN NOT MATCHED THEN
INSERT (coluna1, coluna2, ...) VALUES (valor1, valor2, ...);
Vou explicar os principais elementos dessa instrução:
- tabela_destino: É a tabela alvo onde você deseja aplicar as operações.
- tabela_origem: É a tabela de onde você obtém os dados para atualizar ou inserir na tabela de destino.
- condição_de_correspondência: É a condição usada para determinar quando uma linha na tabela de origem corresponde a uma linha na tabela de destino.
- when matched then: Esta parte é executada quando uma correspondência é encontrada entre a tabela de destino e a tabela de origem. É aqui que você especifica as operações de atualização nas colunas da tabela de destino.
- when not matched then: Esta parte é executada quando não há correspondência entre a tabela de destino e a tabela de origem. É onde você especifica as operações de inserção.
Vamos ver um exemplo simplificado:
Suponha que temos as seguintes tabelas:
Tabela "clientes"
+----+-------+-------+
| ID | nome | email |
+----+-------+-------+
| 1 | Ana | ... |
| 2 | Pedro | ... |
+----+-------+-------+
Tabela "novos_clientes"
+----+-------+-------+
| ID | nome | email |
+----+-------+-------+
| 1 | Maria | ... |
| 3 | João | ... |
+----+-------+-------+
Agora, podemos usar a instrução merge into para atualizar a tabela "clientes" com os dados da tabela "novos_clientes":
MERGE INTO clientes AS alvo
USING novos_clientes AS origem
ON alvo.ID = origem.ID
WHEN MATCHED THEN
UPDATE SET alvo.nome = origem.nome, alvo.email = origem.email
WHEN NOT MATCHED THEN
INSERT (ID, nome, email) VALUES (origem.ID, origem.nome, origem.email);
Neste exemplo, a instrução merge into verifica a correspondência dos IDs nas duas tabelas. Se um ID corresponder, os dados são atualizados. Se não houver correspondência, um novo registro é inserido na tabela "clientes".
Merge Into () : https://ury1.com/Os7X2