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 tablaUPDATE
- Cambia los valores de las columnas de la tablaDELETE
- 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!