Sentencia UPDATE en SQL

UPDATE es el comando DML que permite actualizar registros de base de datos. Dicho de otro modo, UPDATE permite modificar los valores de las columnas de las tablas respetando el tipo de dato correspondiente.

La sintaxis de la sentencia es sencilla:

UPDATE `nombeTabla` SET `nombreColumna` = nuevoValor WHERE condiciones

Al igual que la sentencia DELETE, es muy importante tener en cuenta la cláusula WHERE, para evitar que los cambios en la tabla se propaguen a todos los registros.

Para entender mejor el funcionamiento, vamos a realizar algunos ejemplos de UPDATE sobre la tabla Clientes y Empleados respectivamente.

Revisando los registros de la tabla Clientes, nos fijamos que algunos de ellos se insertaron con errores ortográficos que son precisos corregir:

SELECT *
FROM Clientes
WHERE idClientes = 1;
idClientes nombre apellidos direccion cuenta
1 Fernando García Rodriguez C/ Virgen del rosal 28 111222333

Al apellido Rodríguez le falta el acento:

UPDATE Clientes
SET apellidos = 'García Rodríguez'
WHERE idClientes = 1;

Volvemos a ejecutar la consulta y comprobamos que el registro se ha actualizado correctamente:

idClientes nombre apellidos direccion cuenta
1 Fernando García Rodríguez C/ Virgen del rosal 28 111222333

Ahora veremos otro ejemplo:

SELECT *
FROM Clientes
WHERE idClientes = 2;
idClientes nombre apellidos direccion cuenta
2 María Lopez ruiz C/ Alcalá 138 123456789

Al apellido López le falta el acento, Ruiz empieza en minúscula y la calle debería ser: ‘de Alcalá’ no ‘Alcalá’.

UPDATE Clientes
SET apellidos = 'López Ruiz',
    direccion = 'C/ de Alcalá 138'
WHERE nombre = 'María';

Volvemos a ejecutar la consulta y comprobamos que el registro se ha actualizado correctamente:

idClientes nombre apellidos direccion cuenta
2 María López Ruiz C/ de Alcalá 138 123456789

En este caso hemos filtrado por nombre, porque en nuestra tabla Clientes solo hay una María. Sin embargo, queremos recalcar que esto sería una mala praxis, ya que si hubiera más de una María, el cambio afectaría a todos los registros. Es por ello primordial, filtrar siempre por campos únicos o en su defecto, acotar el registro requerido con más condiciones en la cláusula WHERE.

Pasemos al siguiente ejemplo:

SELECT *
FROM Pedidos
WHERE idPedidos = 1;
idPedidos producto descripcionProducto precio fechaPedido numeroProductos totalPrecio idClientes
1 Xiami Mi 11 Smartphone 286,95 2022-07-09 15 4304,25 3

Al producto Xiaomi le falta la O y además queremos modificar la fechaPedido al 2022-07-10:

UPDATE Pedidos
SET producto = 'Xiaomi Mi 11',
    fechaPedido = '2022-07-10'
WHERE idPedidos = 1;
idPedidos producto descripcionProducto precio fechaPedido numeroProductos totalPrecio idClientes
1 Xiaomi Mi 11 Smartphone 286,95 2022-07-10 15 4304,25 3

Para eliminar el valor de una columna, basta con hacer un UPDATE y setear a NULL o '' el campo dependiendo de las restricciones del mismo.

UPDATE Pedidos
SET descripcionProducto = NULL
WHERE idPedidos = 2;
idPedidos producto descripcionProducto precio fechaPedido numeroProductos totalPrecio idClientes
2 Play Station 5 NULL 549,95 2022-07-18 4 2199,8 2

Es posible también, utilizar UPDATE en tablas cruzadas por alguna cláusula JOIN:

UPDATE C SET cuenta = 111111111
FROM Clientes C
INNER JOIN Pedidos P
ON C.idClientes = P.idClientes
WHERE P.precio > 45
AND C.idClientes = 4;
idClientes nombre apellidos direccion cuenta
4 Luis Sanchez García C/ de la luz 21 111111111

En este caso, al haber en la tabla Pedidos un producto con precio mayor a 45 euros para el cliente con idClientes = 4, la cuenta del cliente se ha actualizado correctamente al nuevo valor.

También es posible recuperar el valor de una SELECT para actualizar un campo:

UPDATE Pedidos
SET descripcionProducto = (SELECT descripcionProducto
                          FROM Pedidos
                          WHERE idPedidos = 1)
WHERE idPedidos = 2;
idPedidos producto descripcionProducto precio fechaPedido numeroProductos totalPrecio idClientes
2 Play Station 5 Smartphone 549,95 2022-07-18 4 2199,8 2