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.
- CASO sencillo
- 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.
Ejemplos
Suposición: Supongamos que tenemos la tabla como 'Gurú99' con dos columnas y cuatro filas como se muestra a continuación:
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.
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 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.
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.
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.
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: |
La palabra clave Case va seguida de la declaración WHEN y no hay expresión entre CASE y WHEN.
P.ej: |
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: |
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: |
El caso simple solo admite verificación de igualdad. Es decir. si CASE_Expression = VALUE_1, VALUE_2…
P.ej: |
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 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
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
CASO con ACTUALIZACIÓN
Supuesto: Supongamos que tenemos la tabla como 'Guru99' con dos columnas y cuatro filas como se muestra a continuación:
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'
Consultemos la tabla Guru99 para verificar el valor actualizado:
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
¡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.