> Manuales > Manual de iniciación a la programación

Seguimos con las clausulas avanzadas, esta vez pasamos a explicar el outer join, unión, intersect y minus.

Para comenzar os comento un poco que en artículos anteriores hemos hablado de la combinación de tablas, concepto que vamos a necesitar tener bastante claro para poder entender el resto de clausulas avanzadas de selección.

Combinación externa (outer join)

Esta clausula nos permite seleccionar filas de una tabla aunque no tengan correspondencia con flas de la otra tabla con la que se la combina.

Su formato es el siguiente:

select tabla1.columna1, tabla1.columna2, tabla2.columna2
from tabla1, tabla2
where tabla1.columna1=tabla2.columna1;


Como veis es bastante fácil y no crea mayor duda. Los registros que no tengan correspondencia con la otra tabla no aparecerán. Para que aparezcan tendremos que colocar el símbolo (+) al final del where y la columna que queremos que aparezca.

Un ejemplo de select seria el siguiente:

select departamento.num, departamento.nombre, emple.nombre
from departamento, nombre
where departamento.num=emple.num;


Aquí agrupamos por el num del departamento que se encuentra en las dos tablas.

Operador unión

Este operador combina los resultados de dos columnas. Si existe alguna fila duplicada solo aparece una en el resultado.

Su formato es el siguiente:

select col1, col2, ... from tabla1 where condición
union
select col1, col2, ... from tabla2 where condición;


Si queremos que nos aparezcan también las filas duplicadas tenemos que utilizar el operador unión all

Por ejemplo si quisiéramos mostrar todos los trabajadores de una empresa, tanto los nuevos como los dados de baja tendríamos que hacer una sentencia como esta:

select nombre from trabajadores_nuevos
union
select nombre from trabajadores_viejos;


Operador intersect

Este operador nos devuelve las filas que son iguales en ambas consultas. Como en el anterior por defecto las filas duplicadas se eliminan y no se muestran en el resultado.

Su formato es el siguiente:

select col1, col2, ... from tabla1 where condición
intersect
select col1, col2, ... from tabla2 where condición;


Un ejemplo muy sencillo seria mostrar los alumnos que todavía están estudiando.

select nombre from alumnos_activos
intersect
select nombre from alumnos;


Operador minus

El operador minus nos devuelve las flas que están en la primera select y no en la segunda. Como en los casos anteriores las filas duplicadas no se muestran en el resultado.

Su formato es:

select col1, col2, ... from tabla1 where condición
minus
select col1, col2, ... from tabla2 where condición;


Un ejemplo para este operador seria mostrar los alumnos que no están en actives

select nombre from alumnos
minus
select nombre from alumnos_activos;


Para finalizar os comento que estos tres últimos operadores los podemos encadenar, teniendo en cuenta que siempre se evalúan de izquierda a derecha.

Además es importante saber que si vas a realizar este tipo de consultas siempre tiene que haber el mismo número de columnas en las dos select y que los tipos de datos deben coincidir.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual