Ir al contenido principal

Actualizar Filas en una Tabla

El comando UPDATE permite cambiar valores de columnas de una o mas en una fila de una sola tabla. La sintaxis básica es la siguiente:

UPDATE tabla SET columna = valor [, columna = valor …] [ WHERE condición ]

Lo mas complejo de la sintaxis del comando utiliza subquerys para los valores de las columnas y para la condición WHERE.

Ejemplos:

-- COMANDO 1
UPDATE EMPLOYEES SET FIRST_NAME = 'SANTIAGO' WHERE EMPLOYEE_ID = 198;

-- COMANDO 2
UPDATE EMPLOYEES SET SALARY = COMMISSION_PCT * 100 WHERE FIRST_NAME = 'David'

En el primer comando se asigna un valor literal a la columna FIRST_NAME utilizando la clausula WHERE para seleccionarlo mediante la llave única de cada empleado. Esto nos garantiza que solo una fila sera actualizada.
El segundo comando es la actualización del salario, la clausula WHERE no es muy precisa debido a que se esta utilizando un campo llamado FIRST_NAME en una condición de igualdad con el literal 'David'. Y en este campo pueden haber varios empleados con el mismo nombre y esto puede provocar la actualización de varias filas.
Si la clausula WHERE es omitida, la actualización sera realizada en toda la tabla. El uso de subquerys también esta permitido en este comando tanto en la asignación de valores como en la clausula WHERE. Cuando utilizamos subquerys para asignarlo a una columna este tipo de subquery debe de ser escalar.

La sintaxis de un UPDATE que utiliza subquerys es la siguiente:

UPDATE tabla
SET columna = [subquery] [, columna = subquery...]
WHERE columna = (subquery) [ AND columna = subquery];

Hay una restricción rigida en el uso de subquerys en la clausula SET: Los subquerys deben ser escalares (devuelve un solo valor, una columna una fila). Si devuelve otra cosa el comando fallara.

UPDATE EMPLOYEES
SET SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES WHERE DEPARTMENT_ID = 50)
WHERE EMPLOYEE_ID IN (SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = 50);

Los subquerys deben devolver valores escalares en caso de utilizar predicados de igualdad. Si esta utilizando IN pueden devolver múltiples filas pero una sola columna.
Los subquerys utilizados en la clausula SET deben ser escalares. Los subquerys utilizados en la clausula WHERE deben ser escalares a mens que este utilizando IN.


Comentarios