jueves, 7 de abril de 2016

Receta T-SQL No. 4-1: ¿Cómo Correlacionar dos Tablas?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 INNER JOIN
6. Práctica: Correlación de las Tablas Person y PersonPhone
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Con esta receta T-SQL se inicia la serie de recetas enfocadas a la creación de consultas sobre múltiples tablas. Una base de datos está constituida por varias tablas que relacionan los tipos de datos para un dominio de problema; cada tabla mantienen en óptimo estado el almacenamiento de los datos; además de su consistencia e integridad. T-SQL ofrece un conjunto de operadores para especificar las consultas sobre múltiples tablas: la información obtenida permite responder a requerimientos de negocio: los empleados y su sueldo, los pedidos de un cliente, los vuelos realizados por un pasajero, etc. Entre esos operadores se cuentan aquellos que permiten ejecutar operaciones como: joins, uniones, y subconsultas.


En esta primera receta T-SQL se muestra cómo correlacionar datos de distintas tablas. Para esto es necesario el uso del operador INNER JOIN, el cual, como se muestra en la sección práctica, permite la correlación de los datos de dos tablas: Person y PersonPhone.

2. Palabras Clave

  • Consistencia
  • Correlación
  • INNER JOIN
  • Integridad
  • Producto cartesiano
  • Subconsulta
  • Tabla

3. Problema

Obtener las personas que tienen por lo menos un número telefónico asociado. Además, indicar por persona los números de cada línea telefónica.

4. Solución

En T-SQL se cuenta con el operador INNER JOIN para correlacionar los registros de dos tablas.

5. Discusión de la Solución

5.1 INNER JOIN

El operador INNER JOIN permite correlacionar dos tablas bajo una condición de correlación -normalmente una llave primaria o un campo con valores en común-. El resultado de la es una tabla que contiene los registros correlacionados del producto cartesiano de las tablas.

Esta es la sintaxis (versión simplificada) para este operador:

SELECT {Proyección de Columnas} 
    FROM {TABLA_1} INNER JOIN {TABLA_2} 
        ON {TABLA_1}.Columna = {TABLA_2}.Columna
    WHERE {Condiciones}

Nótese que frente a la cláusula ON se especifican las columnas bajo las que se correclacionan las tablas a través del operador relacional =.

6. Práctica: Correlación de las Tablas Person y PersonPhone

Este ejemplo (adaptado de Brimhall (2012)) correlaciona dos tablas: 
  • Person y 
  • PersonPhone
de la base de datos AdventureWorks. Se obtendrá el conjunto de personas que tienen por lo menos una línea teléfono junto con los números asociados a cada una de ellas.

SELECT H.BusinessEntityID AS 'Identificación',
FirstName AS 'Primer Nombre',
LastName AS 'Apellido',
PhoneNumber AS 'Número Telefónico'
FROM Person.Person P INNER JOIN Person.PersonPhone H
ON P.BusinessEntityID = H.BusinessEntityID
ORDER BY LastName, FirstName, P.BusinessEntityID;

En este caso el operador INNER JOIN relaciona dos tablas -Person y PersonPhone- (cada una de estas tablas está renombrada para facilitar su referencia en la proyección y correlación). En la cláusula ON se especifican las dos columnas a comparar:

ON P.BusinessEntityID = H.BusinessEntityID

El resultado se ordena por apellido, primer nombre, y el identificador de la persona.

En Microsoft SQL Server Management Studio se ejecuta el código anterior y se obtienen los siguientes registros (versión compacta con 25 registros):
Correlación Person y PersonPhone
Figura 1. Correlación Person y PersonPhone.

7. Conclusiones

Con el operador INNER JOIN de T-SQL se correlacionan dos tablas a partir de la relación de igualdad entre dos columnas de cada tabla. El ejemplo de la sección 6 presentó cómo obtener el conjunto de personas que poseen por lo menos una línea telefónica, además de los números asociados a cada una. Este tipo de operación facilita responder a requerimientos de negocio sobre los tipos de relaciones que mantienen los tipos de datos de un dominio de problema.

La próxima receta T-SQL enseña cómo diseñar una consulta sobre una relación muchos-a-muchos.

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.
Using Joins (2016, abril 7). 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.