Oracle

Oracle CASE Statement Examples: Practical SQL Uses

En este tutorial, exploraremos y aprenderemos a utilizar la expresión CASE de Oracle, una herramienta poderosa que nos permite agregar lógica de condicionales if-else a nuestras sentencias SQL. La expresión CASE evalúa una lista de condiciones y nos devuelve uno de los múltiples resultados posibles. Conocer cómo utilizarla correctamente nos permitirá escribir consultas más complejas y realizar cálculos más avanzados en nuestro código SQL. A lo largo de este artículo, exploraremos los diferentes formatos de la expresión CASE de Oracle y veremos cómo se puede utilizar en diferentes cláusulas y sentencias SQL, ilustrando cada concepto con ejemplos prácticos y aplicaciones comunes.

¿Qué es la expresión CASE de Oracle?

La expresión CASE de Oracle es una poderosa herramienta que nos permite agregar lógica de condicionales if-else a nuestras sentencias SQL. Imagina que necesitas realizar diferentes acciones o cálculos dependiendo de una condición determinada dentro de una consulta SQL. Aquí es donde entra en juego la expresión CASE. Esta expresión evalúa una lista de condiciones y devuelve uno de los múltiples resultados posibles. Puedes utilizar la expresión CASE en cualquier declaración o cláusula que acepte una expresión válida.

Formatos de expresión CASE de Oracle

Existen dos formatos de expresión CASE en Oracle: la expresión CASE simple y la expresión CASE de búsqueda. Ambos formatos admiten una cláusula ELSE opcional.

El formato de expresión CASE simple se utiliza para comparar una expresión con una lista de expresiones simples y determinar el resultado. Su sintaxis es la siguiente:

CASE
    WHEN condición THEN resultado
    WHEN condición THEN resultado
    ...
    ELSE resultado
END

En este formato, se evalúa cada condición en orden y cuando se encuentra una que sea verdadera, se devuelve el resultado correspondiente. Si ninguna de las condiciones es verdadera, se devuelve el resultado especificado en la cláusula ELSE.

Recomendado:  ¿Cómo convertir String a Date en Oracle SQL?

Por otro lado, el formato de expresión CASE de búsqueda se utiliza para evaluar una lista de expresiones booleanas y determinar el resultado. Su sintaxis es la siguiente:

CASE
    WHEN expr1 THEN resultado1
    WHEN expr2 THEN resultado2
    ...
    ELSE resultado
END

En este formato, las expresiones son evaluadas en el orden especificado y cuando se encuentra una que sea verdadera, se devuelve el resultado correspondiente. La diferencia clave entre este formato y el formato simple es que las condiciones no son simples comparaciones, sino expresiones booleanas que pueden ser más complejas.

Uso de la expresión CASE en diferentes declaraciones y cláusulas

La expresión CASE de Oracle se puede utilizar en diferentes declaraciones y cláusulas SQL para agregar lógica de condicionales if-else. A continuación, veremos algunos ejemplos de cómo se puede utilizar en diferentes contextos:

En cláusula SELECT:

En una cláusula SELECT, podemos utilizar la expresión CASE para calcular valores condicionalmente o para generar columnas calculadas. Por ejemplo, supongamos que tenemos una tabla de empleados y queremos mostrar un mensaje diferente según el salario de cada empleado:

SELECT nombre, salario,
       CASE
           WHEN salario > 5000 THEN 'Salario alto'
           WHEN salario > 3000 THEN 'Salario medio'
           ELSE 'Salario bajo'
       END AS descripcion_salario
FROM empleados;

En este ejemplo, utilizamos la expresión CASE para evaluar el salario de cada empleado y generar una descripción personalizada del salario. El resultado sería una columna adicional llamada descripcion_salario que contendría los mensajes correspondientes según el salario de cada empleado.

En cláusula WHERE:

En una cláusula WHERE, podemos utilizar la expresión CASE para filtrar registros basado en una condición. Por ejemplo, supongamos que queremos filtrar los empleados que tienen un salario mayor a 5000:

SELECT nombre, salario
FROM empleados
WHERE CASE
          WHEN salario > 5000 THEN 1
          ELSE 0
      END = 1;

En este ejemplo, utilizamos la expresión CASE en la cláusula WHERE para generar una columna condicional que contiene el valor 1 si el salario es mayor a 5000 o 0 si no lo es. Luego comparamos ese valor con 1 para filtrar los empleados que cumplen esa condición.

Recomendado:  Descubre la Oracle COALESCE Function con ejemplos captivadores

En cláusula HAVING:

En una cláusula HAVING, podemos utilizar la expresión CASE para filtrar grupos de registros basado en una condición. Por ejemplo, supongamos que queremos mostrar solamente los departamentos que tienen más de 10 empleados:

SELECT departamento, COUNT(*) AS cantidad_empleados
FROM empleados
GROUP BY departamento
HAVING CASE
           WHEN COUNT(*) > 10 THEN 1
           ELSE 0
       END = 1;

En este ejemplo, utilizamos la expresión CASE en la cláusula HAVING para generar una columna condicional que contiene el valor 1 si la cantidad de empleados es mayor a 10 o 0 si no lo es. Luego comparamos ese valor con 1 para filtrar los departamentos que cumplen esa condición.

En cláusula ORDER BY:

En una cláusula ORDER BY, podemos utilizar la expresión CASE para ordenar los resultados de una consulta de manera condicional. Por ejemplo, supongamos que queremos ordenar los empleados por su salario, pero primero mostrar los empleados con salarios altos:

SELECT nombre, salario
FROM empleados
ORDER BY CASE
              WHEN salario > 5000 THEN 1
              ELSE 2
          END ASC, nombre ASC;

En este ejemplo, utilizamos la expresión CASE en la cláusula ORDER BY para generar una columna condicional que contiene el valor 1 si el salario es mayor a 5000 o 2 si no lo es. Ordenamos los resultados primero por esta columna de manera ascendente y luego por el nombre de manera ascendente.

En cláusula UPDATE:

En una cláusula UPDATE, podemos utilizar la expresión CASE para actualizar valores de una columna basado en una condición. Por ejemplo, supongamos que queremos aumentar el salario de los empleados con experiencia de 5 años o más:

UPDATE empleados
SET salario = CASE
                   WHEN experiencia >= 5 THEN salario * 1.1
                   ELSE salario
               END
WHERE experiencia >= 5;

En este ejemplo, utilizamos la expresión CASE en la cláusula SET para ajustar el valor del salario condicionalmente. Si la experiencia del empleado es de 5 años o más, multiplicamos el salario por 1.1, de lo contrario, mantenemos el salario sin cambios. Aplicamos esta actualización solo a los empleados con experiencia de 5 años o más.

Estos son solo algunos ejemplos de cómo se puede utilizar la expresión CASE en diferentes declaraciones y cláusulas SQL. Su versatilidad y capacidad para agregar lógica de condicionales if-else hacen que sea una herramienta muy útil en nuestro día a día como desarrolladores y analistas de bases de datos.

Recomendado:  ¿Cómo desbloquear un usuario en Oracle rápidamente?

Ejemplos de la expresión CASE en las cláusulas ORDER BY, HAVING y UPDATE

En la cláusula ORDER BY:

Supongamos que tenemos una tabla de productos y queremos ordenarlos por su precio de forma ascendente, pero queremos que los productos con descuento aparezcan primero. Utilizaremos la expresión CASE en la cláusula ORDER BY para lograrlo:

SELECT producto, precio, descuento
FROM productos
ORDER BY CASE
            WHEN descuento > 0 THEN 0
            ELSE 1
          END ASC, precio ASC;

En este ejemplo, utilizamos la expresión CASE en la cláusula ORDER BY para generar una columna condicional llamada «orden», que asigna el valor 0 a los productos con descuento y 1 a los productos sin descuento. Ordenamos primero por esta columna en forma ascendente, y si hay productos con el mismo valor de «orden», ordenamos por el precio en forma ascendente. Esto asegurará que los productos con descuento aparezcan primero en la lista ordenada.

En la cláusula HAVING:

Supongamos que tenemos una tabla de ventas y queremos obtener el total de ventas por vendedor, pero solo para aquellos vendedores que hayan realizado al menos 5 ventas. Utilizaremos la expresión CASE en la cláusula HAVING para filtrar los grupos de vendedores:

SELECT vendedor, SUM(venta) AS total_venta
FROM ventas
GROUP BY vendedor
HAVING CASE
          WHEN COUNT(*) >= 5 THEN 1
          ELSE 0
       END = 1;

En este ejemplo, utilizamos la expresión CASE en la cláusula HAVING para generar una columna condicional llamada «valido», que asigna el valor 1 a los vendedores con al menos 5 ventas y 0 a los demás. Finalmente, filtramos los grupos de vendedores manteniendo solo aquellos cuyo valor de «valido» es igual a 1.

En la cláusula UPDATE:

Supongamos que tenemos una tabla de empleados y queremos actualizar el estado de empleo de aquellos que tengan un salario superior a 5000. Utilizaremos la expresión CASE en la cláusula UPDATE para esto:

UPDATE empleados
SET estado_empleo = CASE
                       WHEN salario > 5000 THEN 'Activo'
                       ELSE 'Inactivo'
                     END
WHERE salario > 5000;

En este ejemplo, utilizamos la expresión CASE en la cláusula SET para asignar el valor «Activo» a la columna «estado_empleo» cuando el salario del empleado es superior a 5000, y el valor «Inactivo» en caso contrario. Luego, aplicamos esta actualización solo a aquellos empleados cuyo salario sea superior a 5000.

Estos ejemplos demuestran cómo la expresión CASE puede ser utilizada en diferentes cláusulas SQL como ORDER BY, HAVING y UPDATE para agregar lógica de condicionales if-else de manera efectiva.

Autor

osceda@hotmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *