martes, 8 de noviembre de 2016

SUBQUERY DE VARIAS FILAS


IN- ANY- ALL

Las subconsultas que devuelven más de una fila se denominan subconsultas de varias filas. Puede utilizar operadores de varias filas IN- ANY- ALL, en lugar de los de una sola fila, con las subconsultas de varias filas El operador de varias filas espera uno o más valores:

   SELECT  last_name, salary, department_id
       FROM  employees
    WHERE  salary IN (SELECT   MIN(salary)
                                         FROM     employees
                                        GROUP BY department_id);
Ejemplo:

Busque los empleados que ganan un salario igual al salario mínimo para cada departamento.

La consulta interna se ejecuta en primer lugar, generando un resultado de consulta. A continuación se procesa el bloque de consulta principal y utiliza los valores que devolvió la consulta interna para completar su condición de búsqueda. De hecho, la consulta principal aparece en Oracle Server de este modo: 

   SELECT last_name, salary, department_id
      FROM   employees
    WHERE  salary IN (2500, 4200, 4400, 6000, 7000, 8300, 8600, 17000);

Subconsultas de Varias Filas ANY

El operador ANY (y su sinónimo, el operador SOME) compara un valor con cada valor devuelto por la subconsulta. El ejemplo de la diapositiva muestra empleados que no son programadores informáticos y cuyo salario es menor que el de cualquier programador informático. El salario máximo que gana un programador es de 9.000 dólares.
<ANY significa menos que el máximo. >ANY significa más que el mínimo. =ANY es equivalente a IN.


Subconsultas de Varias Filas (ALL

El operador ALL compara un valor con todos los valores devueltos por una subconsulta. El ejemplo de la diapositiva muestra los empleados cuyos salarios son menores que los de todos los empleados con el identificador de puesto IT_PROG y cuyos puestos no son IT_PROG

>ALL significa más que el máximo y <ALL, menos que el mínimo. 

El operador NOT se puede utilizar con los operadores IN, ANY ALL

De forma alternativa, se puede incluir una cláusula WHERE en la subconsulta para mostrar todos los empleados que tienen subordinados:
SELECT last_name FROM employees
WHERE  employee_id  IN 
                        (SELECT manager_id
                         FROM   employees
                         WHERE  manager_id IS NOT NULL);

Las subconsultas tienen estas características: 

  • Pueden transferir una fila de datos a una sentencia principal que contenga un operador de una sola fila como, por ejemplo, =, <>, >, >=, < o <= 
  • Pueden transferir varias filas de datos a una sentencia principal que contenga un operador de varias filas como, por ejemplo, IN 
  • Oracle Server las procesa en primer lugar, después de lo cual las cláusulas WHERE o HAVING utilizan los resultados 
  • Pueden contener funciones de grupo 





Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?