SQL: instrucción CASE

Publicado el 14 noviembre, 2020 por Rodrigo Ricardo

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