4.1 Sentencia ACTUALIZAR CONJUNTO

Si necesita cambiar los registros existentes en la tabla, para esto usamos el operador UPDATE.

Por un lado, el operador UPDATEes similar al operador INSERT, porque necesitamos especificar nuevos valores para las columnas. Y por otro lado, en el operador SELECT, porque te permite trabajar de forma inmediata con grupos de datos.

¡Importante! El propósito del operador UPDATEes cambiar los datos no en una fila de la tabla, sino en todas las filas que cumplan una determinada condición. Y si comete un pequeño error, puede perder fácilmente todos los datos de la tabla.

Vista general de la solicitud:

UPDATE table SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE condition;

Escribamos una consulta que aumente el salario de todos nuestros empleados en 100. Nuestra consulta se verá así:

UPDATE employee SET
  	salary = salary+100;

Y ahora para todos los que tienen un salario de menos de 50K, también lo aumentaremos en un 20%. Ejemplo de solicitud:

UPDATE employee SET
  	salary = salary*1.2
WHERE salary<50000;

Y por supuesto, aumentaremos 2 veces el sueldo del director, como no podría ser sin él:

UPDATE employee SET
  	salary = salary*2
WHERE id=4;

4.2 Escenarios de modificación de datos complejos

Si decide cambiar datos en varias tablas al mismo tiempo, o cuando cambia datos en una tabla, necesita llenarla con datos de otra, o simplemente usar datos de otra tabla en el proceso de cambiar la primera, entonces nos esperan sorpresas.

Intentemos cambiar el nivel de todos los usuarios en la tabla de usuarios que existen en la tabla de empleados. Para simplificar, comprobaremos la coincidencia de usuarios por nombre.

Cómo nos gustaría escribir esta consulta:

UPDATE user SET
  	level = 80,
WHERE user . name IN ( list of names from employee table );

Bueno, agreguemos una lista de nombres de la tabla de empleados a esta consulta:

UPDATE user SET
  	level = 80,
WHERE user.name IN (select name from employee);

¡Interesante! La consulta SQL en sí misma para obtener los nombres resultó ser incluso más corta que la descripción de la tarea. Los creadores de SQL no se comieron el pan en vano.

Obligado a molestarte -este enfoque no funcionará. Primero debe unir estas tablas, se verá así:

UPDATE table 1, table 2 SET
  	column 1 = expression 1,
  	column 2 = expression 2,
  	column 3 = expression 3
WHERE table 1.id = table 2.ref_id;

Hagámoslo un poco más difícil. Debe establecer el nivel en 80 solo para buenos empleados cuyo salario sea superior a 50k. La solución completa se verá así:

UPDATE user, good_employees SET
  	user.level = 80
WHERE user.name = good_employees.name;

Tal combinación de tablas es en realidad INNER JOIN, por lo que al final solo permanecerán los usuarios que tengan una coincidencia por nombre en la segunda tabla.

Pero aún necesitamos seleccionar buenos empleados de alguna manera, así que agreguemos un poco más de código:

SELECT * FROM employee WHERE salary >= 50000

Y ahora sustituimos esta tabla en nuestra consulta final:

UPDATE user,
    (SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
    user.level = 80
WHERE user.name = good_emps.name;

Vive con eso ahora.