Curso
A consistência dos dados é importante para a confiabilidade e a integridade dos bancos de dados relacionais. Ao modificar dados existentes em tabelas relacionadas, usamos a instrução UPDATE
com a cláusula JOIN
para obter a consistência dos dados. A operação UPDATE
with JOIN
é compatível com o SQL Server e é útil para garantir a sincronização precisa dos dados entre as tabelas.
A operação SQL JOIN
permite atualizações mais complexas além das operações de tabela única por meio de chaves estrangeiras compartilhadas entre as diferentes tabelas. A operação UPDATE
com JOIN
é útil para desenvolvedores e administradores de banco de dados, pois aumenta a eficiência e reduz os riscos de inconsistências de dados.
Antes de começar, recomendo que você faça o curso Introdução ao SQL Server da DataCamp para se familiarizar com o funcionamento dos bancos de dados do SQL Server. Este tutorial foi escrito especificamente com o SQL Server em mente. Além disso, confira nosso tutorial, Introdução às uniões de SQL, para saber como usar JOIN
ao trabalhar com várias tabelas no SQL.
Como usar o SQL UPDATE com JOIN
No SQL Server, a operação UPDATE
with JOIN
permite que você atualize os registros de uma tabela com base nos dados correspondentes de outra. Essa técnica é particularmente útil ao sincronizar dados em várias tabelas.
Usando o SQL UPDATE com INNER JOIN
O INNER JOIN
no SQL recupera linhas/registros com dados correspondentes em ambas as tabelas. Quando usado com a instrução UPDATE
, um INNER JOIN
garante que somente os registros na tabela de destino que tenham correspondências na tabela unida sejam atualizados.
A estrutura típica do site UPDATE
com INNER JOIN
envolve a especificação da tabela de destino que precisa ser atualizada e a definição das colunas a serem atualizadas. A estrutura também inclui o uso do site INNER JOIN
para vinculá-lo a outra tabela com base em uma coluna comum para atualizar apenas os registros necessários.
Exemplo de INNER JOIN
Suponha que você esteja gerenciando um banco de dados de varejo em que precisa atualizar uma tabela Sales
para sincronizar com as alterações na tabela Customer
. Um cliente mudou recentemente seu método de contato preferido e você gostaria que essas alterações fossem refletidas nas duas tabelas. Você usará o UPDATE
com INNER JOIN
para garantir que apenas os registros de vendas relacionados aos clientes que atualizaram suas informações de contato sejam modificados sem afetar outras linhas nos dados.
-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);
Práticas recomendadas de UPDATE com INNER JOIN
Ao usar o UPDATE
com o INNER JOIN
, considere as seguintes práticas recomendadas para que você faça consultas eficientes.
-
Use índices em colunas de união: Certifique-se de que as colunas usadas na condição
JOIN
estejam indexadas para otimizar o desempenho, acelerando a execução da consulta. -
Limitar o escopo da atualização: Use a cláusula
WHERE
para garantir que somente as linhas relevantes sejam atualizadas e melhorar o desempenho da consulta.
Usando o SQL UPDATE com LEFT JOIN
O site LEFT JOIN
é usado para recuperar todos os registros da tabela da esquerda (primeira) e os registros correspondentes da tabela da direita (segunda). Uma consulta com LEFT JOIN
retornará NULL
resultados da tabela correta se não houver resultados correspondentes. Quando usado com a instrução UPDATE
, o LEFT JOIN
pode atualizar registros mesmo quando não houver dados correspondentes na segunda tabela, o que é útil para preencher dados ausentes. Confira nossa Folha de consulta de junções SQL se você quiser revisar as uniões de SQL.
Exemplo de LEFT JOIN
Considere o cenário em que você está gerenciando um banco de dados para uma loja de varejo on-line. A tabela Customers
contém uma lista de todos os clientes, enquanto a tabela Orders
contém detalhes dos pedidos feitos por alguns desses clientes. Você usará o site LEFT JOIN
para recuperar e atualizar os detalhes do pedido de todos os clientes, inclusive daqueles que ainda não fizeram um pedido. Esse método preencherá os dados ausentes dos clientes que não têm pedidos feitos com um valor NULL
ou especificado.
Nosso exemplo com LEFT JOIN
será um pouco diferente porque LEFT JOIN
retorna os valores de NULL
se nenhum registro correspondente for encontrado na tabela correta. Por esse motivo, é importante que você descubra como lidar com esses valores em NULL
. Você pode lidar com os valores de NULL
definindo um valor padrão nas colunas a serem atualizadas. Usando a função COALESCE()
, o LEFT JOIN
incluirá uma condição para um valor padrão para os dados ausentes. A consulta a seguir mostra como você pode definir um valor padrão para os valores de NULL
.
-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET
c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT *
FROM Customers;
Você também pode usar as funções COALESCE()
ou IFNULL()
para lidar com os valores de NULL
que envolvem cálculos antes de atualizar as colunas. Para saber mais, confira nosso tutorial sobre a função SQL COALESCE().
Práticas recomendadas de UPDATE com LEFT JOIN
Ao usar o UPDATE
com o LEFT JOIN
, considere as seguintes práticas recomendadas para que você faça consultas eficientes.
-
Use referências explícitas a colunas: Em vez de usar
SELECT *
, especifique explicitamente as colunas que você deseja atualizar para tornar sua consulta mais clara e evitar atualizações não intencionais. -
Use índices em colunas de união: Certifique-se de que as colunas usadas na condição
JOIN
estejam indexadas para melhorar o desempenho da operaçãoJOIN
e o tempo geral de execução da consulta.
Considerações sobre o desempenho do SQL Update com Join
Untender as implicações de desempenho ao usar UPDATE
com JOIN
no SQL é importante para garantir que suas consultas sejam executadas com eficiência. O desempenho dessas operações pode ser influenciado por vários fatores, inclusive o tamanho das tabelas usadas, o tipo de junção usado e a existência ou não de índices adequados.
Índices e velocidade de consulta
A indexação das colunas envolvidas na condição de união é importante para acelerar o processo de atualização. Quando você indexa as colunas adequadamente, a operação localiza apenas as linhas correspondentes durante a união, reduzindo o tempo necessário para a varredura da tabela.
Impacto de grandes conjuntos de dados
Ao trabalhar com grandes conjuntos de dados, as execuções de consultas podem ser mais lentas devido a operações que consomem muitos recursos. Considere as práticas recomendadas a seguir para reduzir os problemas de desempenho com grandes conjuntos de dados. Além disso, experimente o curso de habilidades SQL Server for Database Administrators se você for projetar ou manter bancos de dados regularmente como parte do seu trabalho.
-
Atualizações de lote: Divida as atualizações em lotes menores para reduzir a carga no banco de dados e atualizar os registros com eficiência.
-
Limite o escopo da atualização: Ao usar a cláusula
WHERE
, você especifica as linhas a serem atualizadas, reduzindo o tempo de processamento das consultas.
Erros comuns e como evitá-los
Há alguns erros comuns que você pode encontrar ao usar UPDATE
com JOIN
no SQL Server. Esses erros podem levar a problemas de desempenho ou à atualização de dados não intencionais. A seguir, você encontrará alguns desses erros e como evitá-los.
Atualizações não intencionais
Se você não especificar corretamente a condição de união, o site UPDATE
com JOIN
atualizará mais registros do que o pretendido. Esse erro atualizará uma tabela inteira em vez do subconjunto necessário. Para evitar esse erro, certifique-se sempre de que você use uma condição JOIN
precisa para atualizar as linhas necessárias.
Produtos cartesianos
Um produto cartesiano ocorre quando a condição de união está incorreta ou ausente, o que faz com que a consulta combine todas as linhas da tabela da esquerda com todas as linhas da tabela da direita. Esse problema pode tornar a operação de consulta mais lenta e produzir resultados imprecisos. Para evitar esse erro, sempre verifique se você tem a condição JOIN
definida corretamente. Além disso, certifique-se de que você indique as colunas corretas para aplicar a condição de união.
Alternativas ao SQL UPDATE com JOIN
Embora o UPDATE
com JOIN
seja um método eficiente para atualizar registros em tabelas relacionadas, há métodos alternativos para realizar a atualização. A seguir estão algumas opções.
Subconsultas
As subconsultas são uma alternativa importante ao site JOIN
quando você deseja realizar atualizações com base em uma condição simples. Com as subconsultas, você evitará várias tabelas complexas especificando a condição na subconsulta.
O exemplo a seguir mostra como você pode usar uma subconsulta para atualizar a tabela Sales
com a última CustomerStatus
da tabela Customers
.
-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
-- Fetch CustomerStatus from the Customers table for the matching CustomerID
SELECT CustomerStatus
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
-- Subquery to check if a matching CustomerID exists in the Customers table
SELECT 1
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
);
Declaração MERGE
A instrução MERGE
é um comando SQL versátil que permite que você execute operações UPDATE
, INSERT
ou DELETE
em uma única consulta com base na comparação de duas tabelas. O comando MERGE
é útil quando você precisa sincronizar dados entre duas tabelas, manipulando linhas correspondentes e não correspondentes.
O uso da instrução MERGE
é útil porque fornece um método conciso para executar várias operações em uma única consulta. A sintaxe da instrução MERGE
é a seguinte.
-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
-- Define the common key between the source and target tables
ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
-- Update the target table's column with the corresponding value from the source table
UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
-- Insert the new data into the target table
INSERT (column1, column2)
VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
-- Delete the row from the target table
DELETE;
Conclusão
É importante que você saiba como usar o UPDATE
com JOIN
no SQL Server para fazer atualizações eficientes de dados entre tabelas em bancos de dados relacionais. Essa técnica permite que você atualize registros em uma tabela com base em dados correspondentes em outra, garantindo a consistência e a sincronização dos dados em tabelas relacionadas. A aplicação dessas técnicas e práticas recomendadas pode aprimorar as operações do seu banco de dados, garantindo um gerenciamento de dados preciso, eficiente e confiável.
Se você quiser aprimorar suas habilidades em SQL, recomendo que confira o curso de habilidades SQL Server Fundamentals do DataCamp para melhorar suas habilidades de análise de dados. O curso Writing Functions and Stored Procedures in SQL Server também ajudará você a aprender a manipular dados de forma eficiente no SQL Server. Se você estiver se preparando para a entrevista sobre SQL, recomendo que leia a publicação do nosso blog, 20 Top SQL Joins Interview Questions, para ajudá-lo a se preparar. Por fim, se você deseja aplicar suas habilidades em SQL em uma carreira como engenheiro de dados, considere também fazer o nosso curso de carreira de engenheiro de dados em Python, que inclui uma certificação no final.
Torne-se um engenheiro de dados
Perguntas frequentes sobre SQL
Qual é a finalidade de usar UPDATE com JOIN no SQL?
UPDATE
com JOIN
permite que você atualize registros em uma tabela com base em dados correspondentes de outra tabela.
Como um INNER JOIN difere de um LEFT JOIN quando usado em um comando UPDATE?
Um INNER JOIN
atualiza apenas os registros que têm linhas correspondentes em ambas as tabelas, enquanto um LEFT JOIN
atualiza todos os registros na tabela de destino, inclusive aqueles que não têm uma linha correspondente na tabela unida, preenchendo dados ausentes ou manipulando valores NULL
.
Quais são os problemas de desempenho do UPDATE com JOIN no SQL?
Tabelas/conjuntos de dados grandes podem afetar o desempenho da consulta em UPDATE
com JOIN
, pois exigem mais poder de processamento.
Quais bancos de dados suportam UPDATE com JOIN IN SQL?
O conceito UPDATE
com JOIN
funciona no SQL Server, MySQL e PostgreSQL, embora a sintaxe seja diferente dependendo do banco de dados. A Oracle não oferece suporte a UPDATE
com JOIN
diretamente e requer uma abordagem diferente usando subconsultas ou a instrução MERGE
.
Quais são as alternativas de UPDATE com JOIN no SQL?
O uso de subconsultas ou a instrução MERGE
são alternativas apropriadas de UPDATE
com JOIN
.