martes, 8 de noviembre de 2016

SUBQUERY DE UNA SOLA FILA


Una subconsulta de una sola fila es la que devuelve una fila de la sentencia SELECT interna. Este tipo de subconsulta utiliza un operador de una sola fila. La diapositiva ofrece una lista de operadores de una sola fila.

Ejemplo:

Muestre los empleados cuyos identificadores de puesto sean los mismos que los del empleado 141:

   SELECT last_name, job_id
      FROM  employees
    WHERE job_id =
                   (SELECT job_id
                    FROM   employees
                    WHERE  employee_id = 141);




Una sentencia SELECT se puede considerar un bloque de consulta. El ejemplo de la diapositiva muestra los empleados cuyos identificadores de puesto son iguales que el del empleado 141 y cuyos salarios son mayores que el del empleado 143. 

El ejemplo consta de tres bloques de consulta: la consulta externa y dos consultas internas. Los bloques de consultas internas se ejecutan en primer lugar, con lo que se crean los resultados de consulta ST_CLERK y 2600, respectivamente. A continuación se procesa el bloque de la consulta externa, utilizando los valores que devolvieron las consultas internas para completar sus condiciones de búsqueda. 

Las dos consultas internas devuelven valores únicos (ST_CLERK y 2600, respectivamente), por lo cual esta sentencia SQL se denomina subconsulta de una sola fila. 

Nota: Las consultas externas e internas pueden obtener datos de tablas diferentes. 

Uso de Funciones de Grupo en una Subconsulta 
Puede mostrar datos de una consulta principal mediante una función de grupo en una subconsulta para devolver una sola fila. La subconsulta está entre paréntesis y se coloca después de la condición de comparación.
El ejemplo de la diapositiva muestra el apellido de empleado, el identificador y el salario de todos los empleados cuyo salario sea igual al salario mínimo. La función de grupo MIN devuelve un solo valor (2500) a la consulta externa.



La Cláusula HAVING con Subconsultas 

Puede utilizar subconsultas no sólo en la cláusula WHERE, sino también en la cláusula HAVING. Oracle Server ejecuta la subconsulta y los resultados se devuelven en la cláusula HAVING de la cláusula principal. 

La sentencia SQL de la diapositiva muestra todos los departamentos que tienen un salario mínimo mayor que el del departamento 50. 

Oracle Server ejecuta las subconsultas en primer lugar. 
Oracle Server devuelve los resultados en la cláusula HAVING de la consulta principal. 



Errores en las Subconsultas 

Un error común en las subconsultas se produce cuando se devuelve más de una fila para una subconsulta de una sola fila. 

En la sentencia SQL de la diapositiva, la subconsulta contiene una cláusula GROUP BY, lo que implica que devolverá varias filas, una para cada grupo que encuentre. En este caso, los resultados de la subconsulta son 4400, 6000, 2500, 4200, 7000, 17000 y 8300. 

La consulta externa toma estos resultados y los utiliza en su cláusula WHERE. La cláusula WHERE contiene un operador de igualdad (=), operador de comparación de una sola fila que espera sólo un valor. El operador = no puede aceptar más de un valor de la subconsulta y, por tanto, genera el error. 
Para corregir este error, cambie el operador = a IN.




Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?