CodeGym /Cursos /SQL SELF /Actualización de datos usando UPDATE

Actualización de datos usando UPDATE

SQL SELF
Nivel 21 , Lección 2
Disponible

Hoy vamos a llegar a otro bloque importante de tu nueva base de conocimientos: la actualización de datos. Vamos a ver cómo en PostgreSQL puedes cambiar información existente usando el comando UPDATE. ¿Por qué es importante? Pues porque en la vida real los datos no son estáticos. Imagina que tu colega cambia de número de teléfono, o un estudiante se pasa a otro grupo — obviamente, vas a querer actualizar esos datos en la base.

Cuando tu amor de la escuela, Svetka Sokolova, de repente se convierte en Svetka Khachaturyan (bueno, así es la vida), eso requiere cambios en tu base de datos. Los escenarios donde necesitas actualizar datos pasan todo el rato:

  • Corregir errores en un registro.
  • Actualizar información (mudanza, cambio de estado).
  • Cambios masivos de datos, por ejemplo, subir el sueldo a los empleados.

Actualizar datos es la forma de cambiar los valores de una o varias columnas para una o varias filas de una tabla, sin añadir nuevos registros.

Sintaxis del comando UPDATE

El comando UPDATE en PostgreSQL tiene una sintaxis bastante clara. Vamos a ver la estructura:

UPDATE tabla
SET columna1 = valor1,
    columna2 = valor2
WHERE condicion;

Explicaciones:

  • tabla: el nombre de la tabla donde vamos a cambiar algo.
  • SET columna = valor: el parámetro que define qué columna quieres cambiar y por qué valor.
  • WHERE condicion: la condición que indica qué filas hay que actualizar (muy importante para no actualizar todo sin querer).

Detalle clave: si te olvidas de poner WHERE (o lo haces mal), tus cambios afectarán a todas las filas de la tabla. Eso puede acabar muy mal.

Ejemplo: cambiar el nombre de un estudiante

Supón que tienes una tabla students con las columnas id, name, email. Queremos cambiar el nombre del estudiante con id = 1 a "Maria Chi".

UPDATE students
SET name = 'Maria Chi'
WHERE id = 1;

Este comando va a buscar la fila con id = 1 y actualizar la columna name con el nuevo valor. Fácil, ¿verdad?

Actualizar varias columnas

A menudo necesitas cambiar varios valores en un registro a la vez. Por ejemplo, imagina que el estudiante no solo cambió de nombre, sino también de correo electrónico. Así es como lo haces:

UPDATE students
SET name = 'Otto Lin',
    email = 'otto.lin@example.com'
WHERE id = 2;

Aquí actualizamos tanto name como email para el estudiante con id = 2. PostgreSQL te deja poner varias parejas columna=valor separadas por coma en la sección SET.

Actualizar varias filas

¿Qué pasa si necesitas cambiar datos para varias filas a la vez? Por ejemplo, quieres pasar un grupo de estudiantes a nuevos grupos. Para eso puedes actualizar las filas que cumplen cierto criterio. Supón que tienes el campo group_number, y quieres pasar a todos los estudiantes del grupo 101 al grupo 202:

UPDATE students
SET group_number = 202
WHERE group_number = 101;

Este comando va a actualizar todas las filas donde group_number es igual a 101, cambiándolo por 202.

5. Condición WHERE: ¡ojo!

Como dijimos antes, WHERE es tu salvavidas. Sin él, la consulta va a afectar a todas las filas de la tabla. Por ejemplo, el siguiente comando va a actualizar el GRUPO de todos los estudiantes, no solo los del grupo 101. Eso seguro que no lo quieres:

UPDATE students
SET group_number = 202;

Por favor, pon siempre WHERE si no quieres cargarte los datos sin querer. Mejor prevenir que curar.

Piénsalo así: el comando UPDATE es un comando que cambia columnas de la tabla, no filas. Su objetivo es poner a todas las celdas de una columna un valor concreto. Y solo la presencia de WHERE hace que no se cambien todas las filas.

Actualizar usando datos de otra tabla

A veces no solo necesitas "escribir" un valor a mano, sino que quieres actualizar valores en la tabla A usando datos de la tabla B. Esto pasa mucho — sobre todo si tienes los datos separados: por ejemplo, cálculos en una tabla y perfiles de usuario en otra.

Supón que tienes una tabla students, donde necesitas actualizar la columna debt usando la tabla payments, donde se guarda el tamaño actual de la deuda (due_amount). Cada registro en students tiene su registro correspondiente en payments por el campo student_id.

La sintaxis sería así:

UPDATE students
SET debt = payments.due_amount
FROM payments
WHERE students.id = payments.student_id;

¿Qué pasa aquí?

  • PostgreSQL usa FROM payments como fuente de datos.
  • Con la condición WHERE enlaza las filas entre las tablas.
  • Solo actualiza las filas de students que tienen correspondencia en payments.

Importante entender: dentro de este UPDATE ... FROM realmente ocurre un join oculto — JOIN, solo que sin la palabra clave JOIN.

La cosa es que por debajo hay un JOIN oculto. En realidad sería algo así:

UPDATE students
SET debt = p.due_amount
FROM payments p
    JOIN students s ON s.id = p.student_id
WHERE students.id = p.student_id;

Cómo ver qué se va a actualizar exactamente

Antes de lanzar un UPDATE, es muy sensato mirar qué se va a cambiar exactamente. Puedes hacerlo con un SELECT siguiendo el mismo principio:

SELECT
    students.id, 
    students.name, 
    students.debt AS old_debt, 
    payments.due_amount AS new_debt
FROM students
    JOIN payments ON students.id = payments.student_id;

El resultado te muestra:

  • el valor antiguo de la deuda (old_debt);
  • el nuevo valor que viene de la tabla payments (new_debt).

Este enfoque te ayuda a comprobar que la lógica es correcta antes de sobreescribir los datos para siempre.

Posibles trampas

  • Si payments tiene varios registros para un estudiante, UPDATE dará error: more than one row returned. Tienes que usar agregación (MAX, SUM, LIMIT 1) o asegurarte de que student_id en payments es único.
  • No olvides que UPDATE ... FROM es una característica específica de PostgreSQL y no funciona igual en otras BBDD (por ejemplo, MySQL).

Ejemplos prácticos

Ejemplo 1: Cambiar el estado de los estudiantes

Imagina que los estudiantes que terminan el curso reciben el estado "graduado". Tenemos la columna status. Para actualizar el estado de los estudiantes con completed_course = true:

UPDATE students
SET status = 'graduado'
WHERE completed_course = true;

Ejemplo 2: Subir el sueldo a los empleados

Si tienes una tabla employees y quieres subir el sueldo un 10% a todos los que trabajan en el departamento de ventas:

UPDATE employees
SET salary = salary * 1.10
WHERE department = 'Sales';

Aquí usamos una operación matemática directamente en la sección SET. Es muy útil para cambios masivos.

Ejemplo 3: Actualización condicional

A veces necesitas actualizar datos según una condición. Por ejemplo, si el sueldo del empleado es menor de 50,000, debe subir un 20%, y si es mayor — un 10%:

UPDATE employees
SET salary = CASE
                WHEN salary < 50000 THEN salary * 1.20
                ELSE salary * 1.10
             END;

Este comando usa la construcción CASE para poner reglas diferentes según el valor de salary.

Errores típicos al usar UPDATE

Seguro que ya te imaginas cuál es el error más común, ¿no? Sí, olvidarse del WHERE. Imagina la situación: tienes una base con 10,000 empleados y por error subes el sueldo a todos. Aunque a tus empleados les encante, para tu carrera puede ser... no tan guay.

Otro error típico es actualizar la columna equivocada. Revisa siempre qué y dónde estás escribiendo. Un simple SELECT antes del UPDATE te puede ahorrar un montón de tiempo.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION