Estructura Case y Joins


Estructura Case comparada con Join

La estructura Case evalua una expresión que retorna múltiples resultados, por ejemplo una expresión que evalúa el número de día de la semana puede dar como resultado los valores del 1 al 7, considerando que el número 1 es el día Lunes, el número 2 es el Martes, etc.

Como usar Case en SQL Server

La estructura Case tiene dos formas

  1. La expresión CASE simple compara una expresión con un conjunto de expresiones simples para determinar el resultado.
  2. La expresión CASE buscada evalúa un conjunto de expresiones booleanas para determinar el resultado.

Ambos formatos admiten un argumento ELSE opcional.

Importante:



Como usar Case y Joins

En este artículo vamos a comparar el uso de la estructura Case con el uso de Join, es necesario resaltar que si las opciones posibles del Case cambian, es necesario reescribir la consulta, es decir, si la expresión del Case tiene mas resultados de los iniciales, la consulta ya escrita no sería la correcta.

En el ejercicio siguiente, la estructura Case muestra los nombres de las Categorías en la tabla Categories de la base de datos Northwind, si se inserta otra categoría con sus productos será necesario escribir nuevamente la consulta, lo que posiblemente al usar Joins no sea necesario.

Usando la base de datos Northwind

use Northwind
go

Ejercicio 01

a. Usando Case para la lista de productos y los nombres de las categorías

select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
Case CategoryID
When 1 then ‘Bebidas’
When 2 then ‘Condimentos’
When 3 then ‘Confecciones’
When 4 then ‘Productos diarios’
When 5 then ‘Cereales’
When 6 then ‘Carnes’
When 7 then ‘Conservas’
When 8 then ‘Productos marinos’ End As Categoría
from Products As P
go

El costo estimado de la consulta usando Case se puede ver en la siguiente imagen.
Costo: 0.0033744

b. Usando Join para listar los productos y su categoría (Ver Joins)

Select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
C.CategoryName AS Categoría
from Products As P
join Categories As C on P.CategoryID = C.CategoryID
go

El costo estimado de la consulta usando Joins se puede ver en la siguiente imagen.
Costo: 0.0189873

Si comparamos los valores, Case en este caso es es mas rápido,  al usar Join la consulta tiene un costo de 5,63 veces mayor, es necesario anotar nuevamente que si las categorías cambian, la consulta usando Case es necesario reescribirla.

Ejercicio 02

a. Usando las tablas Region y Terrotories con Case

select T.TerritoryID As ‘Código’, T.TerritoryDescription As ‘Territorio’,
Region = case T.RegionID
When 1 then ‘Este’
When 2 then ‘Oeste’
When 3 then ‘Norte’
When 4 then ‘Sur’ End
from Territories As T
go

El plan de ejecución muestra este costo.

b. Usando Join para listar los territorios y las regiones a las que pertenecen

Select T.TerritoryID as ‘Código’, T.TerritoryDescription as ‘Territorio’,
R.RegionDescription AS ‘Región’
from Territories As T
join Region As R on T.RegionID = R.RegionID
go

Puede notarse los costos

Usando la estructura Case:  0.0033456 y Usando Join: 0.0248898, decida usted cuando aplicar cada una de las opciones, tenga en cuenta que las consultas con menor costo casi siempre puede ser la mejor opción.