miércoles, 2 de mayo de 2012

Uso de función Unión e Intersección y sus Ventajas

Antes de comenzar con este tema, creo necesaria una pequeña introducción a SQL para que la lectura de esta publicación sea un tanto más amigable.
SQL es la sigla para “Lenguaje de Consulta Estructurado” (Structured Query Language). Este lenguage nos permite realizar consultas de distintas complejidades en una base de datos.
La estructura básica de una consulta realizada en Access es la siguiente.


 Tenemos estas 3 tablas a modo de ejemplo, E (Empleado), S (Sucursal) y C (Cargo). De estas tablas queremos saber el RUT, Nombre, Apellido (tabla Empleado), junto a su Nombre_Cargo (tabla Cargo y cargo especificado) de la Dirección de Sucursal (tabla Sucursal) “Huerfanos #78”. Al general la consulta con el asistente, también podemos ver el código SQL asociado (toda consulta realizada tiene un código SQL generado). El de la que queremos hacer en esta ocasión lo podemos ver a continuación:


SELECT E.RUT, E.Nombre, E.Apellido, S.Dirección, C.Nombre_Cargo
FROM SUCURSAL AS S, EMPLEADO AS E, CARGO AS C
WHERE (((S.Dirección)="Huerfanos #78") AND ((C.Nombre_Cargo)="Analista") AND ((S.Id_Sucursal)=[E].[Id_Sucursal]) AND ((E.Id_Cargo)=[C].[Id_Cargo]));

 



Vemos que la primera línea, SELECT, nos muestra TABLA.ATRIBUTO (nombre de la tabla junto al atributo que queremos rescatar de esta). En la línea FROM en este caso se hace referencia a las tablas a utilizar (es común usar abreviaturas como S para llamar a la tabla SUCURSAL  con la finalidad de minizar el código a utilizar, lo que hace esto es renombrar la tabla para una mayor facilidad en el manejo de los datos). En la última línea, WHERE, se dan las especificaciones que necesitamos para que nuestra consulta sea lo más certera posible (en este caso, se especifica que la dirección es Huerfanos #78 y el nombre del cargo es Analista. También se define como se relacionan las tablas entre si (atributo llave, por ejemplo con S.Id_Sucursal)=[E].[Id_Sucursal] decimos que el atributo Id_Sucursal de la tabla S en donde es llave, es el mismo Id_Sucursal de la tabla E y es la forma en que ambas tablas se relacionan).
Esta consulta nos arroja el siguiente resultado en Access:


UNION

Lo que hace la función unión es otorgar una forma sencilla para poder trabajar con dos consultas y relacionarlas entre si.
Su estructura SQL básica sería más menos como lo siguiente:


SELECT  T1.AtributoA, T1.AtributoB, T2.AtributoC
FROM   Tabla1 AS T1, Tabla2 AS T2
UNION
SELECT  T3.AtributoA, T4.AtributoB, T3.AtributoC
FROM   Tabla3 AS T3, Tabla4 AS T4
 

En esto podemos ver claramente como se UNEN 2 consultas que son independientes entre si.

Según los manuales de Microsoft, “Las consultas de selección que se combinan en una consulta de unión deben tener el mismo número de campos de resultados, en el mismo orden y con tipos de datos idénticos o compatibles. Cuando se ejecuta una consulta de unión, los datos de cada conjunto de campos correspondientes se combinan en un solo campo de resultados, de modo que los resultados de la consulta tienen el mismo número de campos que cada una de las instrucciones SELECT”.

Ejemplo: Sean las siguientes consultas SQL

Consulta 1: 
SELECT [Nombre de compañía], [Ciudad]

FROM [Proveedores]
WHERE País="Argentina"

Consulta 2:
SELECT [Nombre de compañía], [Ciudad]
FROM [Clientes]
WHERE País="Argentina";

Al usar la función UNION, deberíamos obtener los nombres de compañía y ciudades que se encuentran tanto en la tabla Proveedores como en la tabla Clientes y que son de Argentina.


INTERSECCION

Esta función, a diferencia de la anterior, funciona como un Y en lógica (la función UNION funciona como un O lógico). Para clarificar su uso veamos el siguiente ejemplo.
Supongamos que poseemos las siguientes tablas:

Tienda
Ventas
Fecha
Local 1
$15.000.000
21-04-2012
Local 2
$25.400.000
12-02-2012
Local 3
$30.000.000
15-03-2012
Local 4
$6.000.000
1-03-2012
 Tabla de Información de tiendas



Fecha
Ventas
17-03-2012
$5.350.000
15-03-2012
$2.340.000
27-04-2012
$12.750.000
Tabla de Ventas por Internet


Lo que haremos en este ejercicio será ver en que fecha se realizaron ventas tanto en el local físico como en internet, para lo cual debemos intersectar ambas tablas. Como aprendimos en conjuntos, al realizar una intersección, lo que rescatamos son los elementos en común en ambos conjuntos, lo que en este caso sería la fecha que se encuentre en ambas tablas. El resultado de dicha intersección es el siguiente:


Fecha
15-03-2012


El código SQL asociado a esta consulta es el siguiente:



SELECT Fecha
FROM Info_Tienda
INTERSECT
SELECT Fecha
FROM Venta_Internet
 




                                                                                                                                                






1 comentario: