Published 16 years ago
(updated 13 years ago)
Para obtener información de una base de datos relacional frecuentemente se requiere combinar registros que se encuentran en tablas diferentes. Cualquier persona con conocimientos de SQL sabe que esto se logra por medio de la instrucción JOIN. Sin embargo, el verdadero potencial de esta instrucción se alcanza cuando nos damos cuenta de que los JOINS no solamente pueden combinar tablas, sino que son capaces de combinar conjuntos de datos.En este artículo daremos un vistazo a cómo se puede aplicar esta instrucción para realizar consultas que combinan conjuntos de datos diversos.
Un breve repaso

Combinando conjuntos de datos



Combinando sin tener un campo en común
Un breve repaso
Antes de proseguir, recordemos la estructura básica de una sentencia JOIN. La sentencia del ejemplo 1 nos permite obtener todos los datos de la TablaA, combinados con los datos de la TablaB, unidos por medio del CampoX, el cual se encuentra disponible en ambas tablas. En esta sentencia hacemos un INNER JOIN, que es el tipo más común.

Combinando conjuntos de datos
En este contexto, nos referimos a un conjunto de datos como una consulta de una o varias tablas a la que se puede acceder como si fuera una sola entidad. Podemos crear un conjunto de datos en SQL y bautizarlo con un alias para poder referirnos a él. El ejemplo 2 muestra como obtener un conjunto de datos y asignarle un alias.

Ahora veamos una aplicación de alias y joins. Vamos a combinar los registros de una tabla (TablaA) con los elementos de un conjunto denominado ConjuntoD, y unirlos mediante su campo en común
(Campo1).
(Campo1).

Una necesidad común para utilizar JOINS es cuando generamos reportes de detalle donde toda la información necesaria se debe mostrar en una sola pantalla. Lo que no sabe la persona que lo solicita es que toda esta información se encuentra dispersa por toda la base de datos y que para presentarla junta es necesario combinar varios conjuntos de datos. El ejemplo 4 muestra como combinar información de dos conjuntos.

El campo en común entre ambos conjuntos de datos es Campo1. Nótese como se tuvieron que crear dos alias para el ConjuntoB. Esto es necesario cuando unimos dos conjuntos de datos y necesitamos hacer
referencia a algún campo en particular como en el caso de ConjuntoB2.Campo1
referencia a algún campo en particular como en el caso de ConjuntoB2.Campo1
Combinando sin tener un campo en común
Bien, ya hemos dicho que se pueden unir tablas o conjuntos de datos por medio de un campo en común, pero ¿qué pasa si necesitamos juntar información que no tiene ningún campo en común? Lo que debemos de hacer es crear un campo ficticio que nos ayude a unir las cosas, en este caso crearemos un campo llamado Conexión con un valor de 1.

Como se podrán imaginar, es necesario que nuestro campo Conexion tenga el mismo valor en ambos conjuntos de datos para que funcione.
De esta forma podemos unir fácilmente información muy distinta una de otra, por ejemplo al unir información de Ventas con Gastos.
Combinando bases de datos diferentes
¿Qué pasa cuando nos solicitan un reporte con información que se encuentra en bases de datos diferentes?
La mayoría de los motores de base de datos cuenta con mecanismos para poder conectarse a otras bases de datos, incluso con manejadores diferentes (Ej: SQL Server hacia Oracle o MySQL).
El ejemplo 6 muestra como hacer un join desde una base de datos en SQL Server hacia una base de datos externa utilizando la instrucción OPENDATASOURCE. Notarán que estamos enviando el user/password como parte del string de conexión, lo cual no es una buena práctica, pero para los fines
de este artículo no hay problema.
Conclusión
Las aplicaciones de software frecuentemente requieren obtener información dispersa entre distintas
fuentes. En este artículo hemos visto algunas técnicas muy útiles para manejar fuentes diversas como conjuntos de datos que se pueden combinar.
Acerca del Autor
Ricardo Rangel Ramírez es Licenciado en Informática egresado de la Universidad de Ecatepec y cuenta con cinco años de experiencia desarrollando Software en plataforma .Net para varias empresas. Actualmente trabaja en el Departamento de Sistemas de Stanhome de México y en un proyecto independiente para Internet. Sus principales habilidades son la Gestión y Explotación de Información, el Análisis, Diseño y Desarrollo de Sistemas, así como la automatización de Procesos en Bases de Datos. riccardorangel@hotmail.com

Como se podrán imaginar, es necesario que nuestro campo Conexion tenga el mismo valor en ambos conjuntos de datos para que funcione.
De esta forma podemos unir fácilmente información muy distinta una de otra, por ejemplo al unir información de Ventas con Gastos.
Combinando bases de datos diferentes
¿Qué pasa cuando nos solicitan un reporte con información que se encuentra en bases de datos diferentes?
La mayoría de los motores de base de datos cuenta con mecanismos para poder conectarse a otras bases de datos, incluso con manejadores diferentes (Ej: SQL Server hacia Oracle o MySQL).
El ejemplo 6 muestra como hacer un join desde una base de datos en SQL Server hacia una base de datos externa utilizando la instrucción OPENDATASOURCE. Notarán que estamos enviando el user/password como parte del string de conexión, lo cual no es una buena práctica, pero para los fines
de este artículo no hay problema.

Conclusión
Las aplicaciones de software frecuentemente requieren obtener información dispersa entre distintas
fuentes. En este artículo hemos visto algunas técnicas muy útiles para manejar fuentes diversas como conjuntos de datos que se pueden combinar.
Acerca del Autor
Ricardo Rangel Ramírez es Licenciado en Informática egresado de la Universidad de Ecatepec y cuenta con cinco años de experiencia desarrollando Software en plataforma .Net para varias empresas. Actualmente trabaja en el Departamento de Sistemas de Stanhome de México y en un proyecto independiente para Internet. Sus principales habilidades son la Gestión y Explotación de Información, el Análisis, Diseño y Desarrollo de Sistemas, así como la automatización de Procesos en Bases de Datos. riccardorangel@hotmail.com
- Log in to post comments