Saiba como o UPDATE com JOIN no SQL simplifica as atualizações entre tabelas no SQL Server. Entenda como INNER JOIN e LEFT JOIN diferem em casos de uso específicos e explore alternativas usando subconsultas ou a instrução MERGE.
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 tableUPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNERJOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN(3,7,9);Tecnologia
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 NULLUPDATE c
SET
c.OrderStatus =COALESCE(o.OrderStatus,'No Orders'),
c.OrderDate =COALESCE(o.OrderDate,'2023-01-01')FROM Customers c
LEFTJOIN Orders o ON c.CustomerID = o.CustomerID;-- Select from the updated Customers tableSELECT*FROM Customers;Tecnologia
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ção JOIN 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 tableUPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers tableSET CustomerStatus =(-- Fetch CustomerStatus from the Customers table for the matching CustomerIDSELECT CustomerStatus
FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
)-- Update rows in Sales where a matching CustomerID exists in the Customers tableWHEREEXISTS(-- Subquery to check if a matching CustomerID exists in the Customers tableSELECT1FROM Customers
WHERE Customers.CustomerID = Sales.CustomerID
);Tecnologia
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 tableMERGEINTO target_table AS target
USING source_table AS source
-- Define the common key between the source and target tablesON target.common_column = source.common_column
-- When a match is found in both tables based on the common keyWHENMATCHEDTHEN-- Update the target table's column with the corresponding value from the source tableUPDATESET target.column= source.column-- When a row exists in the source table but not in the target tableWHENNOTMATCHEDTHEN-- Insert the new data into the target tableINSERT(column1, column2)VALUES(source.column1, source.column2)-- When a row exists in the target table but not in the source tableWHENNOTMATCHEDBY SOURCE THEN-- Delete the row from the target tableDELETE;Tecnologia
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.
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.
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.
Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
Saiba mais sobre a cláusula SQL QUALIFY, um método de filtragem essencial, porém menos conhecido, no SQL. Entenda sua sintaxe, usos e como ela difere de outros métodos de filtragem SQL.
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
UPDATEcom a cláusulaJOINpara obter a consistência dos dados. A operaçãoUPDATEwithJOINé compatível com o SQL Server e é útil para garantir a sincronização precisa dos dados entre as tabelas.A operação SQL
JOINpermite atualizações mais complexas além das operações de tabela única por meio de chaves estrangeiras compartilhadas entre as diferentes tabelas. A operaçãoUPDATEcomJOINé ú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
JOINao trabalhar com várias tabelas no SQL.Como usar o SQL UPDATE com JOIN
No SQL Server, a operação
UPDATEwithJOINpermite 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 JOINno SQL recupera linhas/registros com dados correspondentes em ambas as tabelas. Quando usado com a instruçãoUPDATE, umINNER JOINgarante que somente os registros na tabela de destino que tenham correspondências na tabela unida sejam atualizados.A estrutura típica do site
UPDATEcomINNER JOINenvolve 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 siteINNER JOINpara 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
Salespara sincronizar com as alterações na tabelaCustomer. Um cliente mudou recentemente seu método de contato preferido e você gostaria que essas alterações fossem refletidas nas duas tabelas. Você usará oUPDATEcomINNER JOINpara 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.Práticas recomendadas de UPDATE com INNER JOIN
Ao usar o
UPDATEcom oINNER 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
JOINestejam indexadas para otimizar o desempenho, acelerando a execução da consulta.Limitar o escopo da atualização: Use a cláusula
WHEREpara 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 comLEFT JOINretornaráNULLresultados da tabela correta se não houver resultados correspondentes. Quando usado com a instruçãoUPDATE, oLEFT JOINpode 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
Customerscontém uma lista de todos os clientes, enquanto a tabelaOrderscontém detalhes dos pedidos feitos por alguns desses clientes. Você usará o siteLEFT JOINpara 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 valorNULLou especificado.Nosso exemplo com
LEFT JOINserá um pouco diferente porqueLEFT JOINretorna os valores deNULLse nenhum registro correspondente for encontrado na tabela correta. Por esse motivo, é importante que você descubra como lidar com esses valores emNULL. Você pode lidar com os valores deNULLdefinindo um valor padrão nas colunas a serem atualizadas. Usando a funçãoCOALESCE(), oLEFT JOINincluirá 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 deNULL.Você também pode usar as funções
COALESCE()ouIFNULL()para lidar com os valores deNULLque 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
UPDATEcom oLEFT 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
JOINestejam indexadas para melhorar o desempenho da operaçãoJOINe 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
UPDATEcomJOINno 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
UPDATEcomJOINno 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
UPDATEcomJOINatualizará 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çãoJOINprecisa 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
JOINdefinida 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
UPDATEcomJOINseja 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
JOINquando 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
Salescom a últimaCustomerStatusda tabelaCustomers.Declaração MERGE
A instrução
MERGEé um comando SQL versátil que permite que você execute operaçõesUPDATE,INSERTouDELETEem uma única consulta com base na comparação de duas tabelas. O comandoMERGEé ú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çãoMERGEé a seguinte.Conclusão
É importante que você saiba como usar o
UPDATEcomJOINno 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.