La declaración lógica en SQL CASE es una expresión de flujo de control que le permite agregar lógica if Else a una consulta. En términos generales, puede usar la declaración en cualquier lugar que permita una expresión válida, por ejemplo, con las cláusulas SELECT, UPDATE, DELETE, WHERE, ORDER BY o HAVING.
La expresión SQL case pasa por cada condición y devuelve un valor cuando se cumple la primera condición. Una vez que una condición es verdadera, CASE devolverá el resultado indicado. Si ninguna condición es verdadera, devolverá el valor de la cláusula ELSE. Si no hay ELSE y ninguna condición es verdadera, devuelve NULL.
Sintaxis de la expresión SQL case
El uso de la expresión SQL CASE es posible de 2 maneras diferentes:
- Comparar una columna con un posible conjunto de resultados
- Cree una serie de condiciones booleanas para determinar un resultado
Comparar una columna con un conjunto de resultados
Esta es la sintaxis necesaria para comparar una columna con un conjunto de registros:
CASE
WHEN 1 THEN 'Uno'
WHEN 2 THEN 'Dos'
WHEN 3 THEN 'Tres'
ELSE 'Cuatro'
END
En este ejemplo, los valores contenidos en la columna «a» se comparan con 1, 2 o 3. Si la condición es verdadera, se devolverá el valor ubicado después de THEN.
Nota: la condición ELSE es opcional y sirve como recolector de basura. Si no se respetan las condiciones anteriores será el valor del ELSE el que se devolverá por defecto.
Cree una serie de condiciones booleanas para determinar un resultado
Es posible establecer condiciones más complejas para recuperar un resultado u otro. Esto se puede hacer utilizando la siguiente sintaxis:
CASE
WHEN a=b THEN 'A igual a B'
WHEN a>b THEN 'A superio a B'
ELSE 'A es inferior a B'
END
En este ejemplo, las columnas «a», «b» y «c» pueden contener valores numéricos. Cuando se respetan, las condiciones booleanas permiten entrar en una u otra de las condiciones.
Es posible reproducir el primer ejemplo presentado en esta página usando la siguiente sintaxis:
CASE
WHEN a=1 THEN 'uno'
WHEN a=2 THEN 'dos'
WHEN a=3 THEN 'tres'
ELSE 'cuatro'
END
Ejemplo de la expresión SQL case
Consideremos dos tablas para ejemplos de declaraciones SQL Case:
Tabla “Empleado”:
Emp_id | nombre | calle | ciudad | contact | Salario | id_depto |
---|---|---|---|---|---|---|
101 | jone | althan | surat | 1111111 | 20000 | 10001 |
102 | cartín | udhna | surat | 2222222 | 15000 | 20001 |
103 | kris | ajava | Vadodara | 3333333 | 30000 | 20001 |
104 | dhiru | ramanagar | Vadodara | 8888888 | 36000 | 30001 |
105 | om | althan | surat | 7777777 | 22000 | 30001 |
106 | Adi | vesu | Navsari | 2323232 | 35000 | 10001 |
107 | anuncio | shivnagar | Navsari | 5555555 | 34000 | 10002 |
108 | yogui | althan | surat | 8989898 | 25000 | 10002 |
109 | almizcleño | vesu | Vadodara | 9999999 | 18000 | 10001 |
110 | rudra | Kashi | Hazira | 1212121 | 31000 | 20001 |
Tabla “Departamento”:
id_depto | nombre_depto | ubicación |
---|---|---|
10001 | Cuenta | surat |
20001 | Ventas | Hazira |
30001 | Finanzas | Vadodara |
10002 | Marketing | surat |
Ejemplo-1: SQL case con el comando Select
Use la instrucción SQL Case con la consulta SELECT para buscar y mostrar el mensaje de » Salario mayor que 20000 ‘ con emp_id
SELECT Emp_id, Salario,
CASE WHEN Salario > 20000 THEN 'El salario es mayor a 20000'
WHEN Salario = 20000 THEN 'El salario es 20000'
ELSE 'el salario es inferior a 20000'
END AS 'Salario'
FROM Empleado;
En la consulta de declaración de caso anterior con el comando SELECT, se devolverán los emp_id detalles del salario con un texto como monto del salario, que es un valor de resultado de la expresión condicional de Salario> 20000, Salario = 2000.
RESULTADOS
Emp_id | Salario |
---|---|
101 | 20000 |
102 | 15000 |
103 | 30000 |
104 | 36000 |
105 | 22000 |
106 | 35000 |
107 | 34000 |
108 | 25000 |
109 | 18000 |
110 | 31000 |
Ejemplo-2: SQL case con cláusula Order by
Podemos aplicar la cláusula sql Order by con el comando SELECT en la declaración SQL Case ordenará el valor del resultado en orden ascendente o descendente. Extraiga los datos de los empleados con la identificación del departamento y el nombre del departamento, donde el nombre del departamento será el valor resultante en función de la condición del caso en el orden de dept_id, ejecútelo utilizando la instrucción SQL Case.
SELECT Emp_id, Emp_name, CASE Dept_id WHEN '10001' THEN 'CUENTA' WHEN '10002' THEN 'Marketing' ELSE 'Departmento no encontrado' END AS Department FROM empleado ORDER BY Dept_id;
- La consulta SQL anterior usó una declaración de caso con el comando SELECT que da nombre a cada dept_id y también hemos puesto la cláusula ORDER BY para mostrar el resultado en orden de ID de departamento.
Resultados
Emp_id | Emp_nombre | nombre_depto |
---|---|---|
101 | jone | Cuenta |
102 | cartín | Ventas |
103 | kris | Ventas |
104 | dhiru | Finanzas |
105 | om | Finanzas |
106 | Adi | Cuenta |
107 | anuncio | Marketing |
108 | yogui | Marketing |
109 | almizcleño | Cuenta |
110 | rudra | Ventas |
Ejemplo-3: SQL CASE buscada con el comando SELECT
En el siguiente ejemplo, estamos recuperando la identificación y el nombre del empleado y también usamos la declaración SQL Case buscada para dar la designación del empleado en función del valor de la expresión buscada.
SELECT Emp_id, Emp_name,
CASE WHEN Salario = 20000 THEN 'Analista'
WHEN Salario = 30000 THEN 'administrador'
WHEN Salario = 35000 THEN 'Director'
WHEN Salario = 25000 THEN 'cueta'
WHEN Salario < 20000 THEN 'personal de oficina'
ELSE 'Designación no encontrada'
END AS Designación
FROM empleado;
En la consulta anterior, le damos la designación al empleado en función del valor del salario para el que usamos la declaración SQL Case buscada.
SQL case con instrucción UPDATE
La declaración SQL Case también se puede usar con el comando SQL Update para modificar el valor de columna de las filas. El uso de CASE junto con una instrucción SQL UPDATE permite a los desarrolladores modificar condicionalmente grandes cantidades de datos mediante una única instrucción SQL.
Sintaxis:
UPDATE Tabla set columna1= CASE columna2 WHEN expresión THEN resultado WHEN expresión THEN resultado ... ELSE resultado END
Considere el siguiente ejemplo de declaración SQL Case dentro del comando Actualizar:
Modificar el aumento del salario del empleado según el departamento en el que trabaja el empleado, el empleado del departamento de cuentas obtiene un incremento del 2 %, el departamento de marketing obtiene un incremento del 3 %, el departamento de ventas con un 1 % y el departamento de finanzas otorga un incremento del 4 %, actualice los registros de empleados de la tabla usando la declaración SQL Update con la expresión Case.
UPDATE tblemp SET Salario = CASE Dept_id WHEN 10001 THEN Salario * 1.02 WHEN 10002 THEN Salario * 1.03 WHEN 20001 THEN Salario * 1.01 WHEN 30001 THEN Salario * 1.04 ELSE NULL END
- Cuando ejecutamos la consulta anterior, muestra un mensaje como ’10 filas afectadas por la última consulta’.
- Para verificar el resultado de la declaración de actualización anterior, debemos usar la consulta de selección para obtener datos.
Resumen
La instrucción CASE es útil cuando desea implementar la lógica IF-THEN en SQL Server. En este artículo, vimos qué es la instrucción lógica CASE junto con su sintaxis. También vimos diferentes ejemplos de la declaración CASE junto con la cláusula SELECT, WHERE, ORDER BY y GROUP BY.
Puede anidar CASE dentro de otro CASE para lógica más compleja. Además, asegúrese de manejar adecuadamente los valores NULL y considere el impacto en el rendimiento.