Índice
1. Introducción2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Relación muchos-a-muchos
5.2 INNER JOIN
6. Práctica: Consulta Relación Muchos-A-Muchos
7. Conclusiones
8. Literatura & Enlaces
1. Introducción
Esta receta T-SQL demuestra cómo realizar una consulta sobre una relación de tipo muchos-a-muchos. Se enseña cómo el operador INNER JOIN permite realizar este tipo de consulta intersecando tres tablas: dos tablas simples y una asociativa. En la sección práctica presenta un ejemplo en SQL para conocer los descuentos sobre un nombre de producto particular.
2. Palabras Clave
- Intersección
- Relación muchos-a-muchos
- Tabla asociativa
3. Problema
Dada la relación muchos-a-muchos Product, SpecialOfferProduct y SpecialOffer, encontrar los descuentos para el producto All-Purpose Bike Stand.
4. Solución
Con el operador T-SQL INNER JOIN se puede intersecar varias tablas para crear una consulta sobre una relación muchos-a-muchos.
5. Discusión de la Solución
5.1 Relación muchos-a-muchos
Para modelar una relación muchos-a-muchos es necesario la introducción de una tabla asociativa (o relacional) entre dos tablas. Una tabla asociativa incluye los puntos de intersección de dos tablas; normalmente llaves foráneas de las llaves primarias de las tablas asociadas.
Algunos ejemplos:
- Estudiante <-Matricula-> Materia
- Un estudiante puede matricular muchas materias
- Una materia puede ser matriculada por muchos estudiantes.
En este ejemplo, la tabla asociativa Matricula permite asociar las relación Estudiante y Materia. La asociación se lleva a través de las llaves primarias de estas dos tablas asociadas.
Otro ejemplo donde se tiene la misma propiedad anterior:
- Cliente <-Pedidos-> Producto
- Un cliente puede pedir/comprar varios productos.
- Un producto puede ser pedido/comprado por varios clientes.
5.2 INNER JOIN
[Nota: En la sección 5.1 de Receta T-SQL No. 4-1: ¿Cómo Correlacionar dos Tablas? se explica el uso básico de este operador.]
6. Práctica: Consulta Relación Muchos-A-Muchos
Dada la relación muchos-a-muchos Sales.SpecialOffer <-Sales.SpecialOfferProduct-> Production.Product representada en la Figura 1
Relación muchos-a-muchos SpecialOffer <-SpecialOfferProduct-> Product. |
y el código T-SQL
SELECT P.Name AS 'Nombre Producto',
S.DiscountPct '% Descuento'
FROM Sales.SpecialOffer S INNER JOIN Sales.SpecialOfferProduct O
ON S.SpecialOfferID = O.SpecialOfferID
INNER JOIN Production.Product P
ON O.ProductID = P.ProductID
WHERE P.Name = 'All-Purpose Bike Stand';
el primer INNER JOIN se encarga de correlacionar los registros con valores de las columnas SpecialOfferID iguales en las tablas SpecialOffer y SpecialOfferProduct. Con el segundo INNER JOIN se toma la tabla resultante anterior y se correlaciona con Product usando la columna ProductID. Además con la cláusula WHERE se especifica el predicado de búsqueda del nombre de producto -Name- All-Purpose Bike Stand.
El resultado consiste en un único registro
Relación muchos-a-muchos SpecialOffer <-SpecialOfferProduct-> Product. resultado. |
7. Conclusiones
Se comprendió cómo a través del operador INNER JOIN de T-SQL se puede crear una consulta sobre una relación muchos-a-muchos. Este tipo de relación, como se pudo observar, incluye una tabla adicional conocida como tabla asociativa con las llaves foráneas de las tablas asociadas.
La siguiente receta T-SQL enseñará cómo usar el operador LEFT OUTER JOIN.
8. Literatura & Enlaces
Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach. United States: Apress.Receta T-SQL No. 4-1: ¿Cómo Correlacionar dos Tablas? (2016, abril 8). Recuperado desde: http://ortizol.blogspot.com.co/2016/04/receta-t-sql-no-4-1-como-correlacionar-dos-tablas.html
Using Joins (2016, abril 8). Recuperado desde: https://msdn.microsoft.com/en-us/library/ms191472.aspx
V
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.