Cláusulas avanzadas para selección

Continuamos con cada clausula desarrollada, en estos momentos se pasará a enseñar el outer join, la unión, intersect y minus.

Para comenzar les digo un poco que en los artículos viejos se ha conversado de la mezcla de las tablas, los conceptos que se van a requerir tienen que estar bastante claros para lograr comprender las demás clausulas avanzadas en la selección.

Mezcla externa (outer join)

Se trata de una cláusula el cual os dejará poder seleccionar las filas de alguna tabla si bien no tienen una concordancia con las filas de la otra tabla con el cual se logra mezclar.

Su formato es el presentado a continuación:

[callout font_size=”13px” style=”bluegrey”]
select tabla1.columna1, tabla1.columna2, tabla2.columna2
from tabla1, tabla2
where tabla1.columna1=tabla2.columna1;[/callout]

Como pueden apreciar, realmente es sencillo y no hace una enorme duda. Todo registro que no posea una concordancia con la otra tabla no se mostrará. Para que sea visible, tienen que poner el símbolo (+) al final del where y la columna el cual desean que se muestre.

Un ejemplo de select es el presentado a continuación:

[callout font_size=”13px” style=”bluegrey”]select departamento.num, departamento.nombre, emple.nombre
from departamento, nombre
where departamento.num=emple.num;[/callout]

En este caso se agrupa por el num del departamento el cual se halla en las dos tablas.

Operador unión

Este operador logra combinar cada resultado de dos columnas. Si hay una fila que está duplicada, sencillamente muestra un resultado concreto.

Su formato sería el mostrado a continuación:

[callout font_size=”13px” style=”bluegrey”]select col1, col2, … from tabla1 where condición
union
select col1, col2, … from tabla2 where condición;[/callout]

Si se desea que no os aparezca asimismo las filas duplicadas tienen que manejar el operador unión all.

Es decir que, si quisieran enseñar todos los empleados de alguna compañía, bien sea los nuevos como los dados de baja, tendrían que realizar alguna sentencia como la siguiente:

[callout font_size=”13px” style=”bluegrey”]select nombre from trabajadores_nuevos
union
select nombre from trabajadores_viejos;[/callout]

Operador intersect

Se trata de un operador el cual devuelve cada una de las filas que sean iguales o en las dos consultas. Como en el ya mencionado, por defecto las filas duplicadas se eliminan y no se exhibe el resultado.

Su formato sería el mostrado a continuación:

[callout font_size=”13px” style=”bluegrey”]select col1, col2, … from tabla1 where condición
intersect
select col1, col2, … from tabla2 where condición;[/callout]

Un ejemplo de ello bastante simple sería el exponer cada alumno que aún están estudiando.

[callout font_size=”13px” style=”bluegrey”]select nombre from alumnos_activos
intersect
select nombre from alumnos;[/callout]

Operador minus

Asimismo, el operador minus logra devolver cada fila que permanece en la primera select y no en la segunda. Como es en el caso de las anteriores filas que se duplicaron donde no se logra ver el resultado.

Su formato es:

[callout font_size=”13px” style=”bluegrey”]select col1, col2, … from tabla1 where condición
minus
select col1, col2, … from tabla2 where condición;[/callout]

Un ejemplo claro para ese operador sería el exponer los alumnos que no están en actives.

[callout font_size=”13px” style=”bluegrey”]select nombre from alumnos
minus
select nombre from alumnos_activos;[/callout]

Para terminar, debo decir que esos t res últimos operadores se pueden encadenar, tomando en cuenta que todo el tiempo se han de estudiar de izquierda a derecha.

Asimismo, lo importante aquí es conocer que si van a hacer ese tipo de consultas, todo el tiempo debe existir el mismo número de columnas en las dos select y que aparte de ello, deben estar los tipos de datos que deben coincidir uno del otro.