Volver a la lista de artículos Artículos
Lectura de 5 minutos

Uso de CASE con sentencias de modificación de datos

¿Qué ocurre cuando se combina CASE con las sentencias modificadoras de datos de SQL? Descúbrelo en este artículo.

La expresión CASE es una parte muy útil de SQL y que emplearás con frecuencia. Ya hemos cubierto lo que hace la expresión CASE, cómo formatearla y cómo usarla en una sentencia SELECT en "Cómo usar CASE para añadir lógica a un SELECT". Otro artículo,"Cómo ordenar registros con la cláusula ORDER BY" demostró cómo utilizar CASE en una cláusula ORDER BY.

Pero no hemos agotado todas las posibilidades de la expresión CASE. En este artículo, discutiremos el uso de CASE con las sentencias modificadoras de datos de SQL.

¿Qué son las sentencias modificadoras de datos de SQL?

Hay tres sentencias modificadoras de datos en SQL. Se llaman modificadoras de datos porque hacen cambios a los datos que están almacenados dentro de una tabla de la base de datos. Estas sentencias son bastante familiares, incluso para los usuarios novatos de SQL. Son:

  • INSERT - Añade registros a una tabla
  • UPDATE - Cambia los valores de las columnas de la tabla
  • DELETE - Elimina registros de la tabla

Veremos cómo funciona cada una de estas sentencias con una expresión CASE. Sin embargo, antes de comenzar a escribir consultas, veamos la car que se muestra a continuación. La utilizaremos en todos nuestros ejemplos:

id brand model info
1 Ford Fiesta NULL
2 Ford Mondeo NULL
3 Opel Astra NULL
4 Ford Galaxy NULL
5 Toyota Corolla NULL
6 Toyota RAV4 NULL

Como puede ver, esta tabla almacena detalles sobre los coches: su número de identificación interno, la marca del coche, el nombre del modelo y un campo opcional para información adicional.

Comenzaremos nuestra investigación sobre el uso de sentencias modificadoras de datos con la expresión CASE con la sentencia INSERT.

Inserción de registros con CASE

Puede utilizar una sentencia INSERT para introducir nuevos registros en una tabla. Si desea mover registros de una tabla a otra, utilice la sentencia SELECT INTO.

Nuestro primer ejemplo demostrará la adición de información en una nueva tabla, tab. Esta nueva tabla se creará con la consulta. Observe que en realidad estamos usando una sentencia SELECT INTO para hacer esto. Así es como funciona:

SELECT brand, model,
          CASE brand
               WHEN 'Ford' THEN 'Founder was Henry Ford'
               WHEN 'Opel' THEN 'Founder was Adam Opel'
               WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
                ELSE '-'
		END AS info
INTO tab
FROM car;

Esta sentencia SELECT INTO comienza tomando los datos de las columnas brand y model de la tabla car y los traslada a la tabla recién creada tab recién creada. La tercera columna en tab es la columna info. El valor de la columna info depende del valor de la columna car.brand. Si el valor de la columna car.brand es "Ford", la cadena "El fundador fue Henry Ford" aparecerá en la columna tab.info. Si la marca es "Opel", se mostrará la cadena "El fundador fue Adam Opel"; para "Toyota", se mostrará la cadena "El fundador fue Kiichiro Toyoda". En los demás casos, el valor devuelto será "- ".

Esta es la tabla resultante tab y su contenido:

brand model info
Ford Fiesta Founder was Henry Ford
Ford Mondeo Founder was Henry Ford
Opel Astra Founder was Adam Opel
Ford Galaxy Founder was Henry Ford
Toyota Corolla Founder was Kiichiro Toyoda
Toyota RAV4 Founder was Kiichiro Toyoda

Uso de CASE con UPDATE

La expresión CASE también puede utilizarse en una sentencia UPDATE. La sentencia UPDATE le resultará familiar, ya que cambia o actualiza los valores de las columnas existentes. Si desea actualizar los registros basándose en los valores de las columnas, puede hacerlo con la expresión CASE. Observe el siguiente ejemplo:

UPDATE car SET info =
CASE brand
          WHEN 'Ford' THEN 'Founder was Henry Ford'
          WHEN 'Toyota' THEN 'Founder was Kiichiro Toyoda'
          ELSE '-'
          END
;

Vemos que la información de la columna info ha sido actualizada. Normalmente, pondríamos el nuevo valor en la cláusula SET. En cambio, este valor predeterminado ha sido sustituido por la expresión CASE. El CASE comprueba el valor de la columna brand y lo utiliza para determinar lo que debe introducirse en la columna info. Si en la columna brand se almacena algo que no sea "Ford" o "Toyota", se mostrará una cadena "-" en la columna info para ese registro.

Esta es la tabla car tabla después de la actualización:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
3 Opel Astra
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Observe que el registro del Opel Astra no tiene nada en la columna info. Esto se debe a que "Opel" no se especificó como marca en el WHEN de la expresión CASE. Se ha devuelto el valor definido en ELSE.

Eliminación de datos mediante la expresión CASE

Ahora vamos a hablar de la última de las expresiones de modificación de datos: DELETE. Se utiliza para eliminar registros de una tabla. Una vez más, puede utilizar la expresión CASE en la cláusula WHERE para controlar los resultados. Observe este ejemplo:

DELETE FROM car 
WHERE FALSE = CASE 
    WHEN info IS NOT NULL THEN TRUE
      ELSE FALSE
END
;

Este CASE comprueba si el valor de la columna info es NULL. Si no es NULL, se devuelve el valor TRUE. Si el valor es NULL, se devuelve el valor FALSE de ELSE. Si la expresión CASE devuelve un valor FALSE, ese registro se elimina.

A continuación vemos la tabla car después de eliminar las filas con valores NULL en la columna info:

id brand model info
1 Ford Fiesta Founder was Henry Ford
2 Ford Mondeo Founder was Henry Ford
4 Ford Galaxy Founder was Henry Ford
5 Toyota Corolla Founder was Kiichiro Toyoda
6 Toyota RAV4 Founder was Kiichiro Toyoda

Más información sobre la expresión SQL CASE

Si está interesado en aprender más sobre la expresión CASE, consulte el curso Funciones estándar de SQL de LearnSQL. Aprenderás más sobre esta expresión y otras. Además, podrás practicar tus nuevas habilidades con ejercicios interactivos. ¡Pruébalo hoy mismo!