SQL: instrucción CASE
La declaración CASE
En SQL, la instrucción CASE es como un menú. En función del valor de un campo determinado, se llevan a cabo determinadas instrucciones. La lógica CASE es común en muchos lenguajes de programación y es mucho más intuitiva (y más fácil de seguir) que un enorme bloque de código if / then / else.
En lugar de if / then / else, la sentencia CASE hace uso de WHEN y THEN para determinar la ramificación, mientras que la cláusula ELSE es una frase predeterminada / general. Al final de la declaración, se requiere la palabra clave END .
Además, la instrucción CASE siempre debe ir dentro de la instrucción SELECT. Después de la instrucción END, continúe con la mayor parte del SQL.
Esto puede parecer confuso, así que veamos la sintaxis usando el ejemplo de seleccionar un género de una tabla de artistas. Si el ID de género es 1, se mostrará ‘Rock’, si es 2, se mostrará ‘Clásico’ y, de lo contrario, se mostrará un mensaje genérico.
SELECT artistID
CASE genreID
CUANDO 1 ENTONCES 'Rock'
CUANDO 2 ENTONCES 'Clásico'
ELSE 'Algún otro género'
END
FROM tblArtist;
La siguiente tabla desglosa los diferentes argumentos necesarios.
Parámetro / Argumento | Notas |
---|---|
Expresión | La instrucción después de la instrucción SELECT |
Valores | El valor del campo. En el ejemplo de sintaxis, el valor de genreID. Estos están precedidos por la cláusula WHEN |
Condiciones | Estos le dicen a SQL qué hacer. Después de la cláusula ENTONCES , indicamos lo que debería suceder. En este caso, mostraremos un valor basado en el ID de género. |
MÁS | ¿Qué pasa si no se cumple ninguna de las condiciones? La declaración else cubre ese evento. Si omite esta declaración, la declaración devolverá un NULL. Esto no está mal, pero es mejor incluir la declaración ELSE. |
FIN | Le dice a la base de datos que ha terminado con la instrucción CASE y que continúe procesando. |
Ejemplos
Echemos un vistazo a algunos ejemplos y opciones más que ofrece la declaración CASE.
Más de una condición
No está limitado a un solo valor en las declaraciones WHEN. En el siguiente ejemplo, podemos verificar un ID de región mayor que 1000 o igual a 2.
SELECT employeeID
CASE regionID
WHEN regionID> 1000 THEN 'Northeast'
WHEN 2 THEN 'Southwest'
ELSE 'Alguna otra región'
END
FROM tblEmployee;
Las condiciones se evalúan en orden de arriba hacia abajo (como está escrito), por lo que es posible que se superpongan. ¿Puede ver dónde podría ocurrir la superposición en la siguiente declaración?
SELECCIONE
IDEmpleado CASE regionID
CUANDO regionID> 500 ENTONCES 'Noreste'
CUANDO regionID> 300 ENTONCES 'Sureste'
CUANDO regionID> 200 ENTONCES 'Medio Oeste'
CUANDO regionID> 100 ENTONCES 'Noroeste'
ELSE 'Alguna otra región'
END
FROM tblEmployee;
La superposición puede estar bien, pero puede acaparar los recursos del sistema, por lo que debe evitarse. En este ejemplo, cualquier valor superior a 500 Y superior a 300 se superpondrá para cualquier valor superior a 300. Es redundante. Una mejor manera de escribir esto, evitando confusiones y procesamiento adicional sería:
SELECT employeeID
CASE regionID
WHEN regionID> 500 THEN 'Northeast'
WHEN regionID> 300 AND regionID <= 500 THEN 'Southheast'
WHEN regionID> 200 AND regionID <= 300 THEN 'Midwest'
WHEN regionID> 100 AND regionID <= 200 THEN 'Noroeste '
ELSE' Alguna otra región '
END
FROM tblEmployee;
Funciones CASE y agregadas
Uno de los poderosos beneficios de la declaración CASE es la capacidad de usarla con funciones agregadas (por ejemplo, Count, Average, Sum, etc.). No entraremos en detalles sobre las funciones agregadas aquí; en su lugar, centrémonos en uno sencillo: COUNT . Combinando CASE con COUNT, podemos contar las ocurrencias según el valor de un campo.
SELECT employeeID
CASE regionID
WHEN genreID = 1 THEN 'Rock'
WHEN genreID = 2 THEN 'Classical'
ELSE 'None'
END AS genre_group,
COUNT (1) AS Count
GROUP BY 1;
Esto puede parecer muy confuso, ya que hemos incluido el nombre del campo en la declaración WHEN: es un poco diferente debido al conteo que estamos haciendo. La clave para recordar es que la declaración todavía está incluida dentro de la declaración SELECT; incluye las palabras clave WHEN y THEN, así como una declaración ELSE y la palabra clave END final. El otro código es parte de la función agregada.
Resumen de la lección
La instrucción SQL CASE actúa como una centralita, ramificando rutas específicas según el valor de un determinado campo. Es como una declaración if / then / else, pero sin el desorden y la confusión, especialmente para situaciones con numerosas opciones. En la instrucción CASE, usamos WHEN y THEN para determinar cuándo y dónde bifurcar; ¡Utilice siempre ELSE para detectar excepciones! La sentencia CASE está incrustada en la sentencia SELECT; puede tener múltiples condiciones e incluso incrustar funciones agregadas dentro de la instrucción CASE.
Articulos relacionados
- Creando una Cultura de Responsabilidad con Instrucción Basada en Estándares
- Ataque de inyección SQL: definición, tipos y ejemplos
- Pasos para implementar la instrucción diferenciada
- Instrucción Escalonada: Modelo y ejemplos
- Comprensión de lectura e instrucción diferenciada
- ¿Qué es la instrucción diferenciada? Ejemplos y estrategias
- Educación en ingeniería: instrucción y evaluación
- ¿Qué es la instrucción diferenciada? – Estrategias y ejemplos
- Desarrollar y entregar instrucción comercial
- Instrucción diferenciada en lectura