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
Publicar un comentario