viernes, 8 de abril de 2016

Receta T-SQL No. 4-2: ¿Cómo Realizar una Consulta sobre una Relación Muchos-a-Muchos?

Índice

1. Introducción
2. 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
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
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.