Practicas Subconsultas
Practicas Subconsultas
Practicas Subconsultas
ra
ue
aq
hm
Suponga que desea escribir una consulta para saber quin gana un salario mayor que el
salario de Abel.
Para resolver este problema, usted necesita dos consultas: una para saber cunto gana a
Abel, y una segunda consulta para saber quin gana ms de esa cantidad.
ra
Usted puede resolver este problema mediante la combinacin de las dos consultas, la
colocacin de una consulta dentro de la otra consulta.
La consulta interna (o una subconsulta) devuelve un valor que es utilizado por la consulta
externa (o de la consulta principal). Usando una subconsulta es equivalente a realizar dos
consultas secuenciales y utilizar el resultado de la consulta por primera vez como el valor
de bsqueda en la segunda consulta.
SINTAXIS DE SUBCONSULTAS
aq
ue
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
Una subconsulta es una instruccin SELECT que se incrusta en la clusula FROM de otra
sentencia SELECT.
Usted puede construir las declaraciones de gran alcance de los simples mediante el uso
de subconsultas. Pueden ser muy tiles cuando se necesita para seleccionar registros de
una tabla con una condicin que depende de los datos en la propia tabla.
Puede colocar la subconsulta en una serie de clusulas SQL, incluyendo las siguientes:
Clusula WHERE
Clusula HAVING
clusula FROM
hm
En la siguiente sintaxis:
Operador incluye una condicin de comparacin como>, = o IN
Nota: Las condiciones de comparacin se dividen en dos clases: una hilera de operadores
(>, =,> =, <, <>, <=) y de varias registros operadores (IN, ANY, ALL, EXISTS).
La subconsulta se refiere a menudo como una instruccin anidada SELECT, subSELECT, o sentencia SELECT interior.
aq
ue
ra
hm
ra
TIPOS DE SUBCONSULTAS
Subconsulta de un registro
aq
ue
hm
Nota: Tambin hay varias columnas subconsultas, que son las consultas que devuelven
ms de una columna de la sentencia SELECT interna. Estos se tratan en la Base de
Datos Oracle 11g: SQL Fundamentals II Curso.
operador
=
>
>=
<
<=
<>
Significado
Igual a
Mayor que
Mayor que o igual a
Menor que
Menor o igual a
No igual a
aq
ue
ra
hm
ra
ue
Una instruccin SELECT puede ser considerado como un bloque de consulta. El ejemplo
de la diapositiva muestra a los empleados que hacen el mismo trabajo como Jonathon
Taylor, pero ganan ms sueldo que l.
aq
hm
Nota: Las consultas externas e internas pueden obtener datos de diferentes tablas.
ra
Puede mostrar datos de una consulta principal mediante el uso de una funcin de grupo
en una subconsulta para devolver un solo registro. La subconsulta entre parntesis y se
coloca despus de la condicin de comparacin.
ue
aq
hm
ra
ue
aq
La sentencia SQL de la diapositiva muestra todos los departamentos que tienen un salario
mnimo mayor que el del departamento 50.
Ejemplo:
hm
ue
ra
aq
hm
La consulta externa tiene los resultados y los utiliza en su clusula WHERE. La clusula
WHERE contiene un igual (=) operador, un operador de comparacin de un solo registro
que espera slo un valor. El operador = no puede aceptar ms de un valor de la
subconsulta y, por tanto, genera el error.
Para corregir este error, cambie el operador = a IN.
SELECT employee_id, last_name
FROM employees
WHERE salary IN
(SELECT MIN(salary)
FROM employees
GROUP BY department_id);
ra
ue
aq
hm
Subconsulta no devuelve ningn registro porque no hay ningn empleado llamado "Haas".
Otro problema comn con subconsultas se produce cuando no se devuelven registros por
la consulta interna.
operador
IN
ANY
Significado
Igual a cualquier miembro de la lista.
Debe ir precedido de =! =,>, <, <=,> =. Compara un valor con cada valor
en una lista o devuelto por una consulta. Se evala a FALSE si la
consulta no devuelve registros.
Debe ir precedido de =, ! =,>, <, <=,> =. Compara un valor con cada valor
en una lista o devuelto por una consulta. TRUE si la consulta no
devuelve registros.
aq
ALL
ue
ra
La consulta externa toma los resultados de la subconsulta (null) y utiliza estos resultados
en su clusula WHERE. La consulta externa se encuentra ningn empleado con un ID de
trabajo igual a nulo, por lo que no devuelve ninguna registro. Si existe un trabajo con un
valor nulo, el registro no se devuelve porque la comparacin de dos valores nulos se
obtiene un valor nulo, por lo tanto, la condicin en que no es cierto.
hm
ra
ue
Ejemplo:
aq
Buscar los empleados que ganan el mismo salario que el salario mnimo para cada
departamento.
La consulta interna se ejecuta en primer lugar, produciendo un resultado de la consulta. El
bloque de consulta principal se procesa y utiliza los valores que fueron devueltos por la
consulta interna para completar su condicin de bsqueda. De hecho, la consulta principal
aparece con el servidor Oracle como sigue:
hm
ra
ue
hm
aq
ra
ue
El operador ANY (y su sinnimo, el operador SOME) compara un valor con cada valor
devuelto por una subconsulta. El ejemplo de la diapositiva muestra a los empleados que
no son de TI y programadores cuyo salario es menor que la de cualquier programador de
TI. El salario mximo que un programador gana es de $ 9.000.
< ANY significa menos que el mximo.
> ANY significa ms que el mnimo.
= ANY es equivalente a IN.
aq
hm
ra
ue
`
El operador ALL compara un valor con cada valor devuelto por una subconsulta. El
ejemplo de la diapositiva muestra los empleados cuyo salario es menor que el salario de
todos los empleados con un ID de trabajo de IT_PROG y cuyo trabajo no se IT_PROG.
aq
> ALL significa ms que el mximo y < ALL significa menos que el mnimo.
El operador NOT puede ser utilizado con operadores IN, ANY o ALL
USANDO EL OPERADOR EXISTS
hm
ra
ue
aq
hm
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM employees mgr);
ra
La razn es que todas las condiciones que comparan un resultado de valor nulo en un
valor nulo. As que cuando los valores nulos son propensos a formar parte del conjunto de
resultados de una subconsulta, no utilice el operador NOT IN. El operador NOT IN es
equivalente a <> ALL.
Tenga en cuenta que el valor nulo como parte del conjunto de resultados de una
subconsulta no es un problema si se utiliza el operador IN. El operador IN es equivalente
a = ANY. Por ejemplo, para mostrar a los empleados que tienen subordinados, utilice la
siguiente instruccin:
hm
aq
ue
SELECT emp.last_name
FROM employees emp
WHERE emp.employee_id IN
(SELECT mgr.manager_id
FROM employees mgr);
Por otra parte, una clusula WHERE puede ser incluido en la subconsulta para mostrar
todos los empleados que no tienen los subalternos:
aq
ue
ra
EXAMEN
hm
1. Verdadero
2. Falso
Respuesta: 1
RESUMEN
En esta leccin, usted debe haber aprendido a utilizar subconsultas. Una subconsulta es
una instruccin SELECT que est incrustado en la clusula de otra sentencia SQL. Las
subconsultas son tiles cuando una consulta se basa en un criterio de bsqueda con
valores intermedios desconocidos.
Subconsultas tienen las siguientes caractersticas:
Puede pasar una registro de datos a un pliego que contiene un operador de un solo
registro, como =, <>,>,> =, <, o <=
Pueden pasar varias registros de datos a una declaracin principal que contiene un
operador de varias registros, como IN
Estn procesados por primera vez por el servidor de Oracle, despus de que la
clusula WHERE o HAVING utiliza los resultados
Puede contener funciones de grupo
ue
ra
aq
hm
ue
ra
hm
aq
3. Escriba una consulta que muestra el nmero de empleado y apellido de todos los
empleados que trabajan en un departamento con cualquier empleado cuyo apellido
contiene la letra "u". Guarde su instruccin SQL como lab_07_03.sql. Ejecutar la
consulta.
ra
ue
hm
aq