jueves, 8 de marzo de 2012

Introducción SQL (Comando SELECT 5ta parte)

Subconsultas

Se trata de una técnica que permite utilizar el resultado de una tabla SELECT en otra consulta SELECT. Permite solucionar problemas en los que el mismo dato aparece dos veces. La sintaxis es:

SELECT listaExpresiones
FROM tabla
WHERE expresión operador
(SELECT listaExpresiones
FROM tabla);


Se puede colocar el SELECT dentro de las cláusulas WHERE, HAVING o FROM. El operador puede ser >,<,>=,<=,!=, = o IN. Ejemplo:

SELECT nombre_empleado, paga
FROM empleados
WHERE paga <
(SELECT paga FROM empleados
WHERE nombre_empleado='Martina');


Lógicamente el resultado de la subconsulta debe incluir el campo que estamos analizando. Se pueden realizar esas subconsultas las veces que haga falta:

SELECT nombre_empleado, paga
FROM empleados
WHERE paga <
(SELECT paga FROM empleados
WHERE nombre_empleado='Martina')
AND paga >
(SELECT paga FROM empleados WHERE nombre_empleado='Luis');


La última consulta obtiene los empleados cuyas pagas estén entre lo que gana Luis y lo que gana Martina.

Una subconsulta que utilice los valores >,<,>=,... tiene que devolver un único valor, de otro modo ocurre un error. Pero a veces se utilizan consultas del tipo: mostrar el sueldo y nombre de los empleados cuyo sueldo supera al de cualquier empleado del departamento de ventas.

La subconsulta necesaria para ese resultado mostraría los sueldos del departamento de  ventas. Pero no podremos utilizar un operador de comparación directamente ya que compararíamos un valor con muchos valores. La solución a esto es utilizar instrucciones especiales entre el operador y la consulta. Esas instrucciones son:




Ejemplo:

SELECT nombre, sueldo
FROM empleados
WHERE sueldo >= ALL (SELECT sueldo FROM empleados)

Esa consulta obtiene el empleado que más cobra. Otro ejemplo:

SELECT nombre FROM empleados
WHERE dni IN (SELECT dni FROM directivos)

En ese caso se obtienen los nombres de los empleados cuyos dni están en la tabla de directivos.

Combinaciones especiales

UNIONES

La palabra UNION permite añadir el resultado de un SELECT a otro SELECT. Para ello  ambas instrucciones tienen que utilizar el mismo número y tipo de columnas. Ejemplo:

SELECT nombre FROM provincias
UNION
SELECT nombre FROM comunidades;

El resultado es una tabla que contendrá nombres de provincia y de comunidades. Es decir,  UNION crea una sola tabla con registros que estén presentes en cualquiera de las consultas. Si están repetidas sólo aparecen una vez, para mostrar los duplicados se utiliza UNION ALL en lugar de la palabra UNION.

INTERSECCIONES

De la misma forma, la palabra INTERSECT permite unir dos consultas SELECT de modo que el resultado serán las filas que estén presentes en ambas consultas.

DIFERENCIA

Con MINUS también se combinan dos consultas SELECT de forma que aparecerán los registros del primer SELECT que no estén presentes en el segundo.

Se podrían hacer varias combinaciones anidadas (una unión cuyo resultado se intersectará con otro SELECT por ejemplo), en ese caso es conveniente utilizar paréntesis para indicar qué combinación se hace primero:

(SELECT....
....
UNION
SELECT....
...
)
MINUS
SELECT.... /* Primero se hace la unión y luego la diferencia*/


No hay comentarios:

Publicar un comentario