Tema 6. Actualización de datos (IV)


Modificar el contenido de las filas ( UPDATE )


La sentencia UPDATE modifica los valores de una o más columnas en las filas seleccionadas de una o varias tablas.

La sintaxis es la siguiente:

Origen puede ser un nombre de tabla, un nombre de consulta o una composición de tablas, también puede incluir la cláusula IN si la tabla a modificar se encuentra en una base de datos externa.

La cláusula SET especifica qué columnas van a modificarse y qué valores asignar a esas columnas.

nbcolumna, es el nombre de la columna a la cual queremos asignar un nuevo valor por lo tanto debe ser una columna de la tabla origen. El SQL estándar exige nombres sin cualificar pero algunas implementaciones (como por ejemplo el SQL de Microsoft Jet que estamos estudiando) sí lo permiten.

La expresión en cada asignación debe generar un valor del tipo de dato apropiado para la columna indicada. La expresión debe ser calculable a partir de los valores de la fila que se está actualizando. Expresión no puede ser una subconsulta.

Ejemplo:

UPDATE oficinas INNER JOIN empleados
ON oficinas.oficina = empleados.oficina
SET cuota=objetivo*0.01;

En este ejemplo queremos actualizar las cuotas de nuestros empleados de tal forma que la cuota de un empleado sea el 1% del objetivo de su oficina. La columna a actualizar es la cuota del empleado y el valor a asignar es el 1% del objetivo de la oficina del empleado, luego la cláusula SET será SET cuota = objetivo*0.01 o SET cuota = objetivo/100. El origen debe contener la cuota del empleado y el objetivo de su oficina, luego el origen será el INNER JOIN de empleados con oficinas.

La cláusula WHERE indica qué filas van a ser modificadas. Si se omite la cláusula WHERE se actualizan todas las filas.

En la condición del WHERE se puede incluir una subconsulta. En SQL standard la tabla que aparece en la FROM de la subconsulta no puede ser la misma que la tabla que aparece como origen, pero en el SQL de Microsoft Jet sí se puede.

Ejemplo: Queremos poner a cero las ventas de los empleados de la oficina 12

UPDATE empleados SET ventas = 0 WHERE oficina = 12;

Ejemplo: Queremos poner a cero el limite de credito de los clientes asignados a empleados de la oficina 12.

UPDATE clientes SET limitecredito = 0
WHERE repclie IN (SELECT numemp FROM empleados WHERE oficina = 12);

Si para el cálculo de expresion se utiliza una columna que también se modifica, el valor que se utiliza es el antes de la modificación, lo mismo para la condición de búsqueda.

Cuando se ejecuta una sentencia UPDATE primero se genera el origen y se seleccionan las filas según la cláusula WHERE. A continuación se coge una fila de la selección y se le aplica la cláusula SET, se actualizan todas las columnas incluidas en la cláusula SET a la vez por lo que los nombres de columna pueden especificarse en cualquier orden. Después se coge la siguiente fila de la selección y se le aplica del mismo modo la cláusula SET, así sucesivamente con todas las filas de la selección.

Ejemplo:

UPDATE oficinas SET ventas=0, objetivo=ventas;

O bien:

UPDATE oficinas SET objetivo=ventas, ventas=0;

Los dos ejemplos anteriores son equivalentes ya que el valor de ventas que se asigna a objetivo es el valor antes de la actualización, se deja como objetivo las ventas que ha tenido la oficina hasta el momento y se pone a cero la columna ventas.

Si actualizamos una columna definida como clave foránea, esta columna se podrá actualizar o no siguiendo las reglas de integridad referencial. El valor que se le asigna debe existir en la tabla de referencia.

Si actualizamos una columna definida como columna principal de una relación entre dos tablas, esta columna se podrá actualizar o no siguiendo las reglas de integridad referencial. Aquí puedes repasar las reglas de integridad referencial.


 
Pag.6.4
© aulaClic. Todos los derechos reservados. Free Computer tutorials . Prohibida la reproducción por cualquier medio.
Julio-2001.aulaClic.com



Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies


© aulaClic S.L. Todos los derechos reservados. Prohibida la reproducción por cualquier medio.