domingo, 5 de junio de 2016

Receta T-SQL No. 4-5: ¿Cómo Generar Todas las Posibles Combinaciones de Filas?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Producto Cartesiano
5.2 CROSS JOIN
6. Práctica: Producto Cartesiano entre StateProvince y SalesTaxRate
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta receta T-SQL se centra en enseñar cómo generar todas las posibles combinaciones de registros entre dos tablas. Esto es análogo a al producto cartesiano entre dos conjuntos -en este caso dos tablas-. El operador CROSS JOIN facilita llevar a cabo esta operación.

2. Palabras Clave

  • Fila
  • Producto cartesiano
  • Registro
  • Tabla

3. Problema

Generar todas las posibles combinaciones entre los registros de dos tablas.

4. Solución

En T-SQL se cuenta con el operador CROSS JOIN para la generación de todas las posibles combinaciones entre dos tablas.

5. Discusión de la Solución

5.1 Producto cartesiano

El producto cartesiano de dos conjuntos está definido como:
Definición formal producto cartesiano

Es decir, el conjunto de los pares ordenados (a,b).

Suponiendo que A = {1, 2, 3, 4} y B = {a, b} entonces el producto cartesiano de estos dos conjuntos es:

A x B = {(1, a), (1, b), (2, a), (2, b), (3, a), (3, b), (4, a), (4, b)}

Otro ejemplo interesante para comprender este concepto matemático es el de pintura y pinceles ("Producto cartesiano", 2016):
Producto cartesiano de pintura y pinceles
Figura 1. Producto cartesiano de pintura y pinceles ("Producto cartesiano", 2016).

5.2 CROSS JOIN

En T-SQL el operador CROSS JOIN genera el producto cartesiano de dos tablas, es decir todas las posibles combinaciones de filas.

La sintaxis para esta operación es:

SELECT [listado_campos]
    FROM tabla_1
        CROSS JOIN tabla_2;

Es importante añadir que mientras no se especifique una condición con la clausula WHERE el producto cartesiano será ejecutado sobre las dos tablas especificadas.

6. Práctica: Producto Cartesiano entre StateProvince y SalesTaxRate

En el siguiente ejemplo se generan todas las posibles combinaciones de registros entre las tablas Person.StateProvince y Sales.SalesTaxRate:

SELECT s.CountryRegionCode AS 'Código Regional',
s.StateProvinceCode AS 'Código Provincia',
t.TaxType AS 'Tipo Impuesto',
t.TaxRate AS 'Tasa Impuesto'
FROM Person.StateProvince s
CROSS JOIN Sales.SalesTaxRate t;

Estos son los resultados obtenidos (acortados) en Microsoft SQL Server Management Studio:
Producto cartesiano entre StateProvince y SalesTaxRate
El total de registros devueltos de este producto cartesiano es igual a 5249. Esta cifra coincide con el producto de número de registros de la tabla StateProvince -181- y SalesTaxRate -29-: 181 * 29 = 5249.

7. Conclusiones

Se ha comprendido cómo a través del producto cartesiano se puede calcular o generar todas las posibles combinaciones de registros entre dos tablas. El operador CROSS JOIN permite esta operación simplemente con especificar los nombres de las dos tablas en una cláusula SELECT.

La próxima receta T-SQL explica cómo seleccionar registros de interés a partir de un resultado.

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.
Producto cartesiano (2016, junio 5). Recuperado desde: https://es.wikipedia.org/wiki/Producto_cartesiano
Using Cross Joins (2016, junio 5). Recuperado desde: https://technet.microsoft.com/en-us/library/ms190690%28v=sql.105%29.aspx?f=255


V

No hay comentarios:

Publicar un comentario

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