Las cláusulas avanzadas de la selección

La mezcla externa (outer join)

Se trata de una cláusula la cual deja elegir las filas de una tabla si bien no tienen las correspondientes filas de la otra tabla con la cual se ha de combinar.

El formato sería el siguiente:

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

Como pueden observar, es realmente sencillo y no se genera una gran duda. Cada registro que no posea la correspondencia a la tabla no se mostrará. Para que se muestren, tienen que poner el símbolo (+) al termino del where y la columna que se desee que se muestre.

Un ejemplo de select sería el siguiente:

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

Es allí donde se agrupa por el num del departamento que se halla en las dos tablas.

Operador unión

Se trata de un operador que mezcla cada resultado de dos columnas. Si hay alguna fila que duplique solo mostrará 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 se desea que no se muestre asimismo las filas duplicadas, se tiene que manejar el operador unión all.

Por ejemplo, si quisieran enseñar a cada uno de los empleados de alguna compañía, tanto los nuevos como los dados de baja, debiesen de hacer una sentencia como la siguiente:

select nombre from trabajadores_nuevos
union
select nombre from trabajadores_viejos;

Operador intersect

Se trata de un operador que devuelve las filas que no son iguales a las dos consultas. Como en el ya mostrado por defecto, las filas duplicadas se borran y no se muestra 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 sencillo sería el enseñarle a los alumnos que aún están estudiando.
select nombre from alumnos_activos
intersect
select nombre from alumnos;

Operador minus
Asimismo, el operador minus retoma las filas que se ven en la primera select y no en la segunda. Como es el caso de las viejas filas que fueron duplicadas y no logran mostrar el resultado.

Su formato es:

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

El ejemplo para ese operador es mostrar a los alumnos que no están en actives.
select nombre from alumnos
minus
select nombre from alumnos_activos;

Para terminal, debo decir que esos tres últimos operadores se pueden ir encadenando, tomando en cuenta que todo el tiempo se vive estudiando de izquierda a derecha.