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:

Sintaxis
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:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
idClientes nombre apellidos direccion cuenta
1 Fernando García Rodriguez C/ Virgen del rosal 28 111222333

Al apellido Rodríguez le falta el acento:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar

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:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
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á’.

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar

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:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
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:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
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.

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
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:

PostgreSQL en tu navegador · Ctrl+Enter para ejecutar · los cambios se deshacen al terminar
idPedidos producto descripcionProducto precio fechaPedido numeroProductos totalPrecio idClientes
2 Play Station 5 Smartphone 549,95 2022-07-18 4 2199,8 2