domingo, 10 de abril de 2016

Receta T-SQL No. 4-3: ¿Cómo Convertir una Tabla en Opcional en una Operación JOIN?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 LEFT OUTER JOIN
5.2 RIGHT OUTER JOIN
6. Práctica: Estados y Provincias y sus Tasas de Impuestos
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Una nueva receta T-SQL para entender el proceso de convertir una tabla en opcional en una operación de JOIN. Se estudia los conceptos de tabla de anclaje (o anchor table) y tabla opcional en el contexto de comparación de registros de dos tablas con un JOIN. Para su compresión se presentan las construcciones LEFT OUTER JOIN y RIGHT OUTER JOIN.

2. Palabras Clave

  • Anchor table
  • JOIN
  • Tabla de anclaje
  • Tabla opcional

3. Problema

Enlistar los estados y provincias (norteamericanos) y las tasas de impuestos de cada uno, inclusive si no tienen uno asignado.

4. Solución

T-SQL cuenta con las construcciones 
  • LEFT OUTER JOIN, y 
  • RIGHT OUTER JOIN
para obtener los registros (estados y provincias) y sus tasas de impuestos (aún si éstos no se conocen o si no han sido asignados en los registros).

5. Discusión de la Solución

5.1 LEFT OUTER JOIN

Con la versión LEFT OUTER JOIN (Brimahall, 2012) se toma como tabla de anclaje (o anchor table) la tabla especificada a la izquierda de este operador, y la tabla de la derecha como opcional. Esto quiere decir que los registros de la tabla de anclaje se toman aunque la condición de igualdad no se cumpla en la cláusula ON.
LEFT OUTER JOIN
Figura 1. LEFT OUTER JOIN.

5.2 RIGHT OUTER JOIN

Con RIGHT OUTER JOIN (Brimahall, 2012) se invierte el papel de los operandos; es decir la tabla del operando izquierdo es opcional y la de la derecha será la tabla de anclaje. Nótese la diferencia de las figuras 1 y 2. De forma análoga, con este operador se logra incluir aquellos registros de la tabla Tabla 2 inclusive si no tienen un registro igual en la tabla opcional.
RIGHT OUTER JOIN

6. Práctica: Estados y Provincias y sus Tasas de Impuestos

El código T-SQL que viene a continuación permite obtener el listado de registros -estados y provincias- que tienen asignado una tasa de impuesto. También se incluyen aquellos que no tienen aún asignado ninguna tasa de impuesto.

SELECT S.CountryRegionCode 'Código Región',
S.StateProvinceCode 'Código Provincia',
T.TaxType 'Tipo Impuesto',
T.TaxRate 'Tasa Impuesto'
FROM Person.StateProvince S
LEFT OUTER JOIN Sales.SalesTaxRate T
ON S.StateProvinceID = T.StateProvinceID;

Frente a la cláusula FROM se especifica como tabla de anclaje Person.StateProvince -los estados y provincias- y Sales.SalesTaxRate -tasas de impuestos- como tabla opcional. Esto se traduce en la obtención de los registros que tienen o no asignado una tasa de impuesto.

Resultado de ejecución en Microsoft SQL Server Management Studio 
Estados y provincias con o sin tasa de impuesto
Figura 2. Estados y provincias con o sin tasa de impuesto.

7. Conclusiones

Se comprendió cómo obtener registros que cumplan o no con una condición sobre una operación JOIN, se utilizó la versión LEFT OUTER o RIGHT OUTER dependiendo de la ubicación de la tabla de anclaje: izquierda o derecha.

La próxima receta T-SQL enseña cómo convertir dos tablas en opcionales con el uso del operador FULL OUTER JOIN.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.

V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.