miércoles, 25 de mayo de 2011

Operaciones de Conjuntos en SQL Server 2005 (UNION, EXCEPT, INRERSECT)

En este blog no solo se habla de religion o del fin del mundo, si ya estabas muy asustado con eso. Tambien aqui tratamos otras cosas y eso es de lo que se trata este aporte de SQL Server 2005. Al trabajar con sistemas administradores de bases de datos (DBMS siglas en ingles de Database Management Systems) hemos ido heredando muchos conceptos de matematicas discretas y uno de ellos precisamente son las operaciones de conjuntos. Antes de entrar de lleno en el tema, es necesario hacer una visita a un concepto —heredado de las matematicas— que vamos a tratar aqui: las operaciones de conjuntos. Las operaciones aplicables tanto a un conjunto como a una tabla son las siguientes: Union, Interseccion, diferencia y diferencia simetrica como se observa en la tabla a continuacion

Operaciones de conjuntos en SQL

Como practica, Consideremos el caso siguiente:
Tres cursos se impartieron en una escuela: Matematicas, Ingles, Historia y se necesita saber lo siguiente: 1) quienes han cursado al menos una materia 2)Quien ya curso todas 3)Quien no ha cursado matematicas

Primero, creamos tres conjuntos de datos (o en este caso van a ser tablas temporales) y las llenamos con informacion

create table #historia (nombre varchar(30))
create table #matematicas (nombre varchar(30))
create table #ingles (nombre varchar(30))

insert into #historia (nombre) values ('Luis Osorio')
insert into #historia (nombre) values ('Martha Martinez')
insert into #historia (nombre) values ('Daniel Gonzalez')
insert into #historia (nombre) values ('Noemi Sanchez')

insert into #ingles (nombre) values ('Luis Osorio')
insert into #ingles (nombre) values ('Martha Martinez')
insert into #ingles (nombre) values ('Daniel Gonzalez')
insert into #ingles (nombre) values ('Cristal Lopez')

insert into #Matematicas (nombre) values ('Luis Osorio')
insert into #Matematicas (nombre) values ('Martha Martinez')
insert into #Matematicas (nombre) values ('Noemi Sanchez')
insert into #Matematicas (nombre) values ('Cristal Lopez')


Despues, iremos respondiendo cada cuestionamiento. Empezamos con el #1, saber quienes han cursado al menos una materia. En este caso la operacion que realizariamos seria una union, en esta se utiliza el operador UNION de SQL Server con el cual combinariamos los resultados de tres queries en uno solo y tendriamos algo como esto:

Union en SQL Server 2005

Por defecto, UNION elimina los registros duplicados como se observo en el ejemplo anterior. Si se desea tener esos duplicados se puede especificar UNION ALL en nuestro ejemplo y con eso tendriamos de vuelta los registros duplicados, aunque generalmente lo que se requiere es no tener duplicidad de datos.

El siguiente caso a resolver es quien ya curso las tres materias. La operacion a realizar sera una interseccion ya que en este caso buscamos miembros de los tres conjuntos. El operador que usaremos ahora es INTERSECT, que retorna registros coincidentes en los tres queries de nuestro ejemplo dando como resultado lo siguiente:

Intersection en SQL Server 2005

Y finalmente, para saber quien no curso matematicas, usamos el operador EXCEPT el cual permite saber cuales "registros de A no estan en B", dicho de otra forma si tenemos la clases de Ingles e Historia y a esas clases les aplicamos el operador EXCEPT sabriamos quien ya llevo esas dos materias pero no ha llevado matematicas, el resultado de este ultimo se los presento a continuacion:



Esto es a grosso modo como funcionan las operaciones de conjunto en SQL Server 2005 y es como todo, bastante util si sabes donde usarlo y sacarle provecho y puedo decir a ciencia cierta que me ha sido util

No hay comentarios.:

Publicar un comentario