Declaración CASE y caso anidado en SQL Server: ejemplo de T-SQL

¡Descripción general del caso en la vida real!

Nuevamente, en la vida real realizamos diferentes acciones dependiendo del resultado de diferentes condiciones.

Para elaborar más, considere el siguiente ejemplo:

  • Si los billetes de avión cuestan menos de 100 dólares, visitaré Los Ángeles.
  • Si los billetes de avión cuestan entre $100 y $200, entonces visitaré Nueva York.
  • Si los billetes de avión cuestan entre 200 y 400 dólares, entonces visitaré Europa.
  • De lo contrario, preferiré visitar algún lugar turístico cercano.

Consideremos categorizar Condición y Acción por separado del ejemplo anterior a continuación:

Condiciones - Boletos de avión Acciones realizadas, sólo si la condición es VERDADERO
Less que $ 100 Visita los angeles
Entre $ 100 a $ 200 Visitar nueva york
Entre $ 200 a $ 400 Visitar europa
Ninguna de las condiciones anteriores se cumplió Punto turístico cercano

En el ejemplo anterior, podemos ver que el resultado de las diferentes condiciones rige la acción separada. Por ejemplo, el visitante realizará el acto de visitar Nueva York sólo si el billete de avión cuesta entre $100 y $200.

De manera similar, la declaración CASE de MS SQL también proporciona la capacidad de ejecutar diferentes declaraciones T-SQL en función del resultado de diferentes condiciones.

¿Qué es la declaración CASE en SQL Server?

Declaración CASE en SQL Server es la extensión de la declaración IF...ELSE. A diferencia de IF...ELSE, donde solo se permite el máximo de una condición, CASE permite al usuario aplicar múltiples condiciones para realizar diferentes conjuntos de acciones en MS SQL. Devuelve un valor correspondiente asociado con la condición definida por el usuario.

Aprendamos cómo usar Case en SQL y su concepto en las siguientes secciones.

In MS SQL, hay dos tipos de CASO.

  1. CASO sencillo
  2. CASO buscado

CASO sencillo

La sintaxis del caso simple

CASE <Case_Expression>
     WHEN Value_1 THEN Statement_1
     WHEN Value_2 THEN Statement_2
     .
     .
     WHEN Value_N THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

Aquí,

  • El parámetro Expresión_caso denota la expresión con la que eventualmente seremos comparados Valor_1, Valor_2, salpicadero de coches y etc.
  • Los parametros Declaración_1, Declaración_2… denota las declaraciones que se ejecutarán si Case_Expression = Valor_1, expresión_caso = Valor_2,… y así sucesivamente.
  • En pocas palabras, el condición es si Case_Expression = Valor_N y ACCIÓN es la ejecución de Declaración_N si el el resultado anterior es VERDADERO.
  • APODO es opcional y es el nombre de alias dado al resultado de la declaración CASE de SQL Server. Se utiliza principalmente cuando usamos Case en la cláusula de selección del servidor SQL.

Reglas para casos simples

  • Caso simple solo permite la verificación de igualdad de Case_Expression con Value_1 a Value_N.
  • Case_Expression se compara con Value, en orden comenzando desde el primer valor, es decir, Value_1. A continuación se muestra el enfoque de ejecución:
  • Si Case_Expression es equivalente a Value_1, se omitirán más declaraciones WHEN...THEN y la ejecución CASE TERMINARÁ inmediatamente.
  • Si Case_Expression no coincide con Value_1, entonces Case_Expression se compara con Value_2 para determinar la equivalencia. Este proceso de comparar Case_Expression con Value continuará hasta que Case_Expression encuentre un valor equivalente coincidente del conjunto de Value_1, Value_2,…
  • Si nada coincide, entonces el control pasa a la instrucción ELSE y se ejecutará Statement_Else.
  • MÁS es opcional.
  • Si ELSE no está presente y Case_Expression no coincide con ninguno de los valores, entonces Se mostrará nulo.

El siguiente diagrama ilustra el flujo de ejecución del caso simple.

Funcionamiento de la declaración de caso simple
Funcionamiento de la declaración de caso simple

Ejemplos

Suposición: Supongamos que tenemos la tabla como 'Gurú99' con dos columnas y cuatro filas como se muestra a continuación:

Caso simple en SQL Server

Usaremos 'Gurú99' tabla en más ejemplos

Consulta 1: CASO SIMPLE con la opción NO MÁS

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Resultado: El siguiente diagrama explica el flujo de ejecución de un CASO SIMPLE sin NADA MÁS.

Caso simple en SQL Server

Consulta 2: CASO SIMPLE con la opción ELSE.

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Resultado: El siguiente diagrama explica el flujo de ejecución de un CASO SIMPLE con ELSE.

Caso simple en SQL Server

CASO buscado

La sintaxis del caso buscado

CASE 
     WHEN <Boolean_Expression_1> THEN Statement_1
     WHEN <Boolean_Expression_2> THEN Statement_2
     .
     .
     WHEN <Boolean_Expression_N> THEN Statement_N
     [ELSE Statement_Else]   
END AS [ALIAS_NAME]

Aquí,

  • El parámetro Boolean_Expression_1,… denota la expresión que se evaluará para VERDADERO o FALSO.
  • Los parámetros Declaración_1, Declaración_2… indican las declaraciones que se ejecutarán si su resultado correspondiente Boolean_Expression_1, Boolean_Expression_2 es ​​VERDADERO.
  • En pocas palabras, la Condición es Boolean_Expression_1,… y ACCIÓN es la ejecución de Statement_N si lo anterior boolean_Expression_1 es VERDADERO.
  • ALIAS_NAME es opcional y es el nombre de alias asignado al resultado de la declaración CASE. Se utiliza principalmente cuando usamos CASE en la cláusula de selección.

Reglas para el caso buscado

  • A diferencia del caso simple, el caso buscado no se limita únicamente a la verificación de igualdad, sino que permite la expresión booleana.
  • La expresión booleana se evalúa en orden comenzando desde la primera expresión booleana, es decir, expresión_booleana_1. A continuación se muestra el enfoque de ejecución:
    • Si Boolean_expression_1 es VERDADERO, se omitirán más declaraciones WHEN...THEN y la ejecución CASE TERMINARÁ inmediatamente.
    • Si Boolean_expression_1 es FALSE, entonces Boolean_expression_2 se evalúa para la condición TRUE. Este proceso de evaluación de la expresión booleana continuará hasta que una de las expresiones booleanas devuelva VERDADERO.
    • Si nada coincide, entonces el control pasa a la instrucción ELSE y se ejecutará Statement_Else.
  • Al igual que el caso simple, ELSE también es opcional en el caso de búsqueda.
  • Si ELSE no está presente y ninguna expresión booleana devuelve VERDADERO, se mostrará Nulo.

Debajo del diagrama ilustrar el flujo de ejecución del Caso buscado.

Elaboración de la declaración del caso buscado

Elaboración de la declaración del caso buscado

Ejemplos

Consulta 1: CASO BUSCADO con la opción NO MÁS

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Resultado: Debajo del diagrama explica el flujo de ejecución de las CASO BUSCADO con NO MÁS.

Ejemplo de CASE buscado en SQL Server

Consulta 2: CASO BUSCADO con el ELSE .

SELECT Tutorial_ID, Tutorial_name,
CASE 
	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Resultado: Debajo del diagrama explica el flujo de ejecución of el CASO BUSCADO con DEMÁS.

CASO buscado en SQL Server

Diferencia entre enfoque de ejecución: SIMPLE y CASO DE BÚSQUEDA.

Echemos un vistazo a CASO SENCILLO ejemplo a continuación:

SELECT Tutorial_ID, Tutorial_name,
CASE Tutorial_name
	WHEN 'SQL' THEN 'SQL is developed by IBM'
	WHEN 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
	ELSE 'This is NO SQL language.'
END AS Description
FROM Guru99

Aquí, 'Tutorial_nombre' es parte de la expresión CASE en SQL. Entonces 'Tutorial_nombre' El valor se compara con cada uno. CUANDO los valores, es decir, 'SQL'... hasta que 'Tutorial_name' coincida con los valores CUANDO.

Al contrario, CASO DE BÚSQUEDA el ejemplo no tiene Expresión CASO:

SELECT Tutorial_ID, Tutorial_name,
CASE 
 	WHEN Tutorial_name = 'SQL' THEN 'SQL is developed by IBM'
	WHEN Tutorial_name = 'PL/SQL' THEN 'PL/SQL is developed by Oracle Corporation.'
	WHEN Tutorial_name = 'MS-SQL' THEN 'MS-SQL is developed by Microsoft Corporation.'
END AS Description
FROM Guru99

Aquí, cada uno CUANDO declaración tiene su Expresión booleana condicional. Cada Expresión booleana es decir, Tutorial_name = 'SQL',… se evalúa para VERDADERO FALSO hasta primer booleano expresión que se evalúa como VERDADERO.

Diferencia entre caso simple y buscado

Caso simple Caso buscado
La palabra clave CASE va seguida inmediatamente de CASE_Expression y antes de la declaración WHEN.

P.ej:
CASE
CUANDO Valor_1 ENTONCES Declaración_1…

La palabra clave Case va seguida de la declaración WHEN y no hay expresión entre CASE y WHEN.

P.ej:
CASO CUANDO ENTONCES Declaración_1…

En caso simple, existe VALOR para cada declaración CUANDO. Estos valores: Valor_1, Valor_2… se comparan con una única CASE_Expression de forma secuencial. El resultado se evalúa para determinar la condición VERDADERO/FALSO para cada declaración WHEN.

P.ej:
CASE
CUANDO Valor_1 ENTONCES Declaración_1…
CUANDO Valor_2 ENTONCES Declaración_2…

En caso buscado, Boolean_Expression existe para cada declaración WHEN. Estas expresiones_booleanas: expresión_booleana_1, expresión_booleana_2,… evalúan la condición VERDADERO/FALSO para cada declaración WHEN.

P.ej:
CASE
CUANDO ENTONCES Declaración_1…
CUANDO ENTONCES Declaración_2…

El caso simple solo admite verificación de igualdad. Es decir. si CASE_Expression = VALUE_1, VALUE_2…

P.ej:
CASE CUANDO Valor_1 ENTONCES Declaración_1... En el ejemplo anterior, la única operación realizada por el sistema es verificar si Expresión_Caso = Valor_1

Con Boolean_Expression_N, Search Case admite cualquier operación que dé como resultado un valor booleano. Incluye operador igual y no igual.

P.ej:
CASO CUANDO THEN Statement_1... En el ejemplo anterior, Boolean_Expression_1 puede contener operadores 'igual a' y 'no igual a' como A = B, A! = B.

CASO anidado: CASO en SI ELSE

Podemos utilizar CASO dentro SI ELSE. A continuación se muestra el código MS-SQL de ejemplo.

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 190;
IF @Flight_Ticket > 400
   PRINT 'Visit Nearby Tourist Location';
ELSE 
BEGIN
    SELECT
	CASE 
	WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
	WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
	WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
	END AS Location	
END

En el ejemplo anterior, CASE está ANIDADO dentro de la declaración IF...ELSE:

Primero, se ejecutará la declaración IF y si la condición del caso en Servidor SQL es Falso, entonces se ejecutará la instrucción ELSE.

De lo contrario, contiene una instrucción CASE anidada en SQL. Según el valor del boleto de avión, se mostrará uno de los siguientes resultados:

  • El sistema imprimirá "Visitar ubicación turística cercana" si los boletos de avión cuestan > $400
  • El sistema imprimirá "Visita Los Ángeles" si los boletos de avión están ENTRE $0 Y $100
  • El sistema imprimirá 'Visita Nueva York' si los boletos de avión están ENTRE $101 Y $200
  • El sistema imprimirá 'Visita Europa' si los billetes de avión están ENTRE $201 Y $400

CASE anidado en SQL Server

CASO anidado: CASO dentro de CASO

Podemos usar CASE dentro de CASE en SQL. A continuación se muestra el código MS-SQL de ejemplo.

DECLARE @Flight_Ticket int;
SET @Flight_Ticket = 250;
SELECT
CASE 
WHEN @Flight_Ticket >= 400 THEN 'Visit Nearby Tourist Location.'
WHEN @Flight_Ticket < 400 THEN 
    	CASE 
		WHEN @Flight_Ticket BETWEEN 0 AND 100 THEN 'Visit Los Angeles'
		WHEN @Flight_Ticket BETWEEN 101 AND 200 THEN 'Visit New York'
		WHEN @Flight_Ticket BETWEEN 201 AND 400 THEN 'Visit Europe'
		END	
END AS Location

En el ejemplo anterior, CASE está ANIDADO dentro de otra declaración CASE:

El sistema comienza ejecutando el CASE externo. Si Flight_Ticket <$400, se ejecutará CASE interno.

Dependiendo del valor del boleto de avión, se mostrará uno de los siguientes resultados:

  • El sistema imprimirá "Visitar ubicación turística cercana" si los boletos de avión cuestan > $400
  • El sistema imprimirá "Visita Los Ángeles" si los boletos de avión están ENTRE $0 Y $100
  • El sistema imprimirá 'Visita Nueva York' si los boletos de avión están ENTRE $101 Y $200
  • El sistema imprimirá 'Visita Europa' si los billetes de avión están ENTRE $201 Y $400

Ejemplo de CASE anidado en SQL Server

CASO con ACTUALIZACIÓN

Supuesto: Supongamos que tenemos la tabla como 'Guru99' con dos columnas y cuatro filas como se muestra a continuación:

CASO con ACTUALIZACIÓN en SQL Server

Usaremos la tabla 'Guru99' en más ejemplos.

Podemos usar CASE con ACTUALIZAR. A continuación se muestra el código MS-SQL de ejemplo:

UPDATE Guru99
SET Tutorial_Name = 
	(
	CASE
	WHEN Tutorial_Name = 'SQL' THEN 'Structured Query language.'
	WHEN Tutorial_Name = 'PL/SQL' THEN 'Oracle PL/SQL'
	WHEN Tutorial_Name = 'MSSQL' THEN 'Microsoft SQL.'
	WHEN Tutorial_Name = 'Hadoop' THEN 'Apache Hadoop.'
	END
	)

En el ejemplo anterior se utiliza CASE en la declaración ACTUALIZAR.

Dependiendo del valor de Tutorial_Name, la columna Tutorial_Name obtendrá la actualización con el valor de la declaración THEN.

  • Si Tutorial_Name = 'SQL' ENTONCES actualice Tutorial_Name a 'Lenguaje de consulta estructurado'
  • Si Tutorial_Name = 'PL/SQL' ENTONCES actualice Tutorial_Name a 'Oracle PL/SQL'
  • Si Tutorial_Name = 'MSSQL' ENTONCES actualice Tutorial_Name a 'Microsoft SQL'
  • Si Tutorial_Name = 'Hadoop' ENTONCES actualice Tutorial_Name a 'Apache Hadoop'

CASO con ACTUALIZACIÓN en SQL Server

Consultemos la tabla Guru99 para verificar el valor actualizado:

CASO con ACTUALIZACIÓN en SQL Server

CASO con pedido por

Podemos usar CASE con Order By. A continuación se muestra el código MS-SQL de ejemplo:

Declare @Order Int;
Set @Order = 1
Select * from Guru99 order by 
CASE 
	WHEN @Order = 1 THEN Tutorial_ID
	WHEN @Order = 2 THEN Tutorial_Name
	END
DESC

Aquí CASE se utiliza con Ordenar por.

@Order se establece en 1 y como primera CUANDO la expresión booleana se evalúa como VERDADERA, se selecciona Tutorial_ID para Ordenar por condición

CASO con Ordenar por en SQL Server

¡Datos interesantes!

  • CASE se puede anidar en otro CASE así como en otra declaración IF...ELSE.
  • Además de SELECT, CASE se puede utilizar con otro SQL cláusula como ACTUALIZAR, ORDENAR POR.

Resum

  • En MS SQL, hay dos tipos de CASO: CASO simple y CASO buscado
  • ELSE es opcional en la declaración CASE.