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 |