Curso
Los datos coherentes son importantes para la fiabilidad y la integridad en las bases de datos relacionales. Al modificar datos existentes en tablas relacionadas, utilizamos la sentencia UPDATE
con la cláusula JOIN
para lograr la coherencia de los datos. La operación UPDATE
con JOIN
está soportada en SQL Server y es útil para garantizar una sincronización precisa de los datos entre tablas.
La operación SQL JOIN
permite actualizaciones más complejas que las de una sola tabla mediante claves externas compartidas entre las distintas tablas. La operación UPDATE
con JOIN
es útil para desarrolladores y administradores de bases de datos, ya que mejora la eficacia y reduce los riesgos de incoherencias en los datos.
Antes de empezar, te recomiendo que sigas el curso Introducción a SQL Server de DataCamp para familiarizarte con el funcionamiento de las bases de datos SQL Server. Este tutorial está escrito pensando específicamente en SQL Server. Consulta también nuestro tutorial, Introducción a las uniones SQL, para aprender a utilizar JOIN
cuando trabajes con varias tablas en SQL.
Cómo utilizar SQL UPDATE con JOIN
En SQL Server, la operación UPDATE
con JOIN
te permite actualizar registros de una tabla basándote en datos coincidentes de otra. Esta técnica es especialmente útil cuando se sincronizan datos de varias tablas.
Utilizar SQL UPDATE con INNER JOIN
El INNER JOIN
en SQL recupera filas/registros con datos coincidentes en ambas tablas. Cuando se utiliza con la sentencia UPDATE
, INNER JOIN
garantiza que sólo se actualicen los registros de la tabla destino que tengan coincidencias correspondientes en la tabla unida.
La estructura típica de UPDATE
con INNER JOIN
consiste en especificar la tabla de destino que hay que actualizar y definir las columnas que hay que actualizar. La estructura también incluye el uso de la INNER JOIN
para enlazarla con otra tabla basada en una columna común para actualizar sólo los registros necesarios.
Ejemplo de INNER JOIN
Supongamos que gestionas una base de datos de venta al por menor en la que necesitas actualizar una tabla Sales
para sincronizarla con los cambios en la tabla Customer
. Un cliente ha cambiado recientemente su método de contacto preferido, y querrías que estos cambios se reflejaran en las dos tablas. Utilizarás UPDATE
con INNER JOIN
para asegurarte de que sólo se modifican los registros de ventas relacionados con los clientes que han actualizado su información de contacto, sin afectar a otras filas de los datos.
-- 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);
UPDATE con INNER JOIN mejores prácticas
Cuando utilices UPDATE
con INNER JOIN
, ten en cuenta las siguientes prácticas recomendadas para realizar consultas eficientes.
-
Utilizar índices en columnas de unión: Asegúrate de que las columnas utilizadas en la condición
JOIN
están indexadas para optimizar el rendimiento, acelerando la ejecución de la consulta. -
Limitar el alcance de la actualización: Utiliza la cláusula
WHERE
para asegurarte de que sólo se actualizan las filas relevantes y mejorar el rendimiento de la consulta.
Uso de SQL UPDATE con LEFT JOIN
Se utiliza un LEFT JOIN
para recuperar todos los registros de la tabla izquierda (primera) y los registros coincidentes de la tabla derecha (segunda). Una consulta con LEFT JOIN
devolverá NULL
resultados de la tabla correcta si no hay resultados coincidentes. Cuando se utiliza con la sentencia UPDATE
, LEFT JOIN
puede actualizar registros aunque no haya datos coincidentes en la segunda tabla, lo que resulta útil para rellenar los datos que faltan. Consulta nuestra Hoja de trucos sobre uniones SQL si quieres repasar las uniones SQL.
ejemplo de LEFT JOIN
Imagina que gestionas la base de datos de una tienda online. La tabla Customers
contiene una lista de todos los clientes, mientras que la tabla Orders
contiene detalles de los pedidos realizados por algunos de estos clientes. Utilizarás la página LEFT JOIN
para recuperar y actualizar los datos del pedido de todos los clientes, incluidos los que aún no han realizado ningún pedido. Este método rellenará los datos que faltan de los clientes que no tienen pedidos realizados con un valor NULL
o especificado.
Nuestro ejemplo con LEFT JOIN
va a ser un poco diferente porque LEFT JOIN
devuelve valores de NULL
si no se encuentran registros coincidentes en la tabla correcta. Por ello, es importante averiguar cómo tratar estos valores NULL
. Puedes gestionar los valores de NULL
estableciendo un valor por defecto en las columnas que se van a actualizar. Utilizando la función COALESCE()
, el LEFT JOIN
incluirá una condición para un valor por defecto para los datos que faltan. La siguiente consulta muestra cómo establecer un valor por defecto para los 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;
También puedes utilizar las funciones COALESCE()
o IFNULL()
para manejar los valores de NULL
que implican cálculos antes de actualizar las columnas. Consulta nuestro tutorial sobre la función SQL COALESCE() para obtener más información.
UPDATE con LEFT JOIN mejores prácticas
Cuando utilices UPDATE
con LEFT JOIN
, ten en cuenta las siguientes prácticas recomendadas para realizar consultas eficientes.
-
Utiliza referencias explícitas a columnas: En lugar de utilizar
SELECT *
, especifica explícitamente las columnas que quieres actualizar para que tu consulta sea más clara y evitar actualizaciones involuntarias. -
Utilizar índices en columnas de unión: Asegúrate de que las columnas utilizadas en la condición
JOIN
están indexadas para mejorar el rendimiento de la operaciónJOIN
y el tiempo total de ejecución de la consulta.
Consideraciones sobre el rendimiento de la actualización SQL con unión
Untender las implicaciones de rendimiento al utilizar UPDATE
con JOIN
en SQL es importante para garantizar que tus consultas se ejecutan con eficacia. El rendimiento de estas operaciones puede verse influido por varios factores, como el tamaño de las tablas utilizadas, el tipo de unión utilizado y la existencia de índices adecuados.
Índices y velocidad de consulta
Indexar las columnas implicadas en la condición de unión es importante para acelerar el proceso de actualización. Si indexas las columnas adecuadamente, la operación sólo localizará las filas coincidentes durante la unión, reduciendo el tiempo necesario para la exploración de la tabla.
Impacto de los grandes conjuntos de datos
Cuando se trabaja con grandes conjuntos de datos, las ejecuciones de las consultas pueden ser más lentas debido a las operaciones que consumen muchos recursos. Considera las siguientes buenas prácticas para mitigar los problemas de rendimiento con grandes conjuntos de datos. Prueba también el itinerario de habilidades SQL Server para Administradores de Bases de Datos si vas a diseñar o mantener bases de datos regularmente como parte de tu trabajo.
-
Actualizaciones de lotes: Divide las actualizaciones en lotes más pequeños para reducir la carga de la base de datos y actualizar los registros con eficacia.
-
Limita el alcance de la actualización: Cuando utilizas la cláusula
WHERE
, especificas las filas a actualizar, reduciendo el tiempo de procesamiento de las consultas.
Errores comunes y cómo evitarlos
Hay algunos errores comunes que puedes encontrar al utilizar UPDATE
con JOIN
en SQL Server. Estos errores pueden provocar problemas de rendimiento o la actualización de datos no deseados. A continuación se enumeran algunos de estos errores y cómo evitarlos.
Actualizaciones involuntarias
Si no especificas correctamente la condición de unión, el UPDATE
con JOIN
actualizará más registros de los previstos. Este error actualizará una tabla entera en lugar del subconjunto necesario. Para evitar este error, asegúrate siempre de utilizar una condición JOIN
precisa para actualizar las filas necesarias.
Productos cartesianos
Un producto cartesiano se produce cuando la condición de unión es incorrecta o falta, lo que hace que la consulta haga coincidir cada fila de la tabla izquierda con cada fila de la tabla derecha. Este problema puede ralentizar el funcionamiento de la consulta y producir resultados inexactos. Para evitar este error, asegúrate siempre de tener bien definida la condición JOIN
. Asegúrate también de indicar las columnas correctas para aplicar la condición de unión.
Alternativas a SQL UPDATE con JOIN
Aunque UPDATE
con JOIN
es un potente método para actualizar registros en tablas relacionadas, existen métodos alternativos para conseguir la actualización. A continuación se indican algunas opciones.
Subconsultas
Las subconsultas son una alternativa importante a JOIN
cuando quieres realizar actualizaciones basadas en una condición simple. Con las subconsultas, evitarás múltiples tablas complejas especificando la condición en la subconsulta.
El siguiente ejemplo muestra cómo utilizar una subconsulta para actualizar la tabla Sales
con la última CustomerStatus
de la tabla 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
);
Declaración MERGE
La sentencia MERGE
es un comando SQL versátil que te permite realizar operaciones UPDATE
, INSERT
o DELETE
en una única consulta basada en la comparación de dos tablas. La sentencia MERGE
es útil cuando necesitas sincronizar datos entre dos tablas, manejando filas coincidentes y no coincidentes.
Utilizar la sentencia MERGE
es útil porque proporciona un método conciso para realizar varias operaciones en una sola consulta. La sintaxis de la declaración MERGE
es la siguiente.
-- 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;
Conclusión
Comprender cómo utilizar UPDATE
con JOIN
en SQL Server es importante para actualizar eficazmente los datos de varias tablas en bases de datos relacionales. Esta técnica te permite actualizar los registros de una tabla basándote en los datos coincidentes de otra, garantizando la coherencia y sincronización de los datos entre tablas relacionadas. La aplicación de estas técnicas y buenas prácticas puede mejorar las operaciones de tu base de datos, garantizando una gestión de datos precisa, eficaz y fiable.
Si quieres avanzar en tus conocimientos de SQL, te recomiendo que consultes el curso de conocimientos Fundamentos de SQL Server de DataCamp para mejorar tus habilidades de análisis de datos. El curso Escribir funciones y procedimientos almacenados en SQL Server también te ayudará a aprender la manipulación eficaz de datos en SQL Server. Si estás preparando tu entrevista SQL, te recomiendo que leas nuestra entrada del blog, 20 preguntas principales de la entrevista SQL Joins para ayudarte a prepararte. Por último, si quieres aplicar tus conocimientos de SQL en una carrera como ingeniero de datos, considera también cursar nuestra carrera de Ingeniero de Datos en Python, que se completa con una certificación al final.
Conviértete en Ingeniero de Datos
Preguntas frecuentes sobre SQL
¿Para qué sirve utilizar UPDATE con JOIN en SQL?
UPDATE
con JOIN
te permite actualizar registros de una tabla basándote en datos coincidentes de otra tabla.
¿En qué se diferencia una INNER JOIN de una LEFT JOIN cuando se utiliza en una sentencia UPDATE?
Un INNER JOIN
actualiza sólo los registros que tienen filas coincidentes en ambas tablas, mientras que un LEFT JOIN
actualiza todos los registros de la tabla de destino, incluidos los que no tienen una fila coincidente en la tabla unida, rellenando los datos que faltan o manejando los valores de NULL
.
¿Cuáles son los problemas de rendimiento de UPDATE con JOIN en SQL?
Las tablas/conjuntos de datos grandes pueden afectar al rendimiento de las consultas de UPDATE
con JOIN
, ya que requieren más capacidad de procesamiento.
¿Qué bases de datos admiten UPDATE con JOIN IN SQL?
El concepto UPDATE
con JOIN
funciona en SQL Server, MySQL y PostgreSQL, aunque la sintaxis difiere según la base de datos. Oracle no admite UPDATE
con JOIN
directamente y requiere un enfoque diferente utilizando subconsultas o la sentencia MERGE
.
¿Cuáles son las alternativas de UPDATE con JOIN en SQL?
Utilizar subconsultas o la sentencia MERGE
son alternativas adecuadas de UPDATE
con JOIN
.