Índice
1. Introducción2. 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
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):
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;
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.