Sei sulla pagina 1di 25

Uso de Subconsultas para resolver problemas

OBJETIVOS DE CERTIFICACIN 8.01 Definir Subconsultas 8.02 Describir los tipos de problemas Que las subconsultas puede resolver 8.03 Lista de los tipos de subconsultas 8.04 Escribir una sola fila y de varias filassubconsultas Los seis captulos anteriores se han ocupado de la instruccin SELECT con considerable detalle, pero en todo caso la instruccin SELECT ha sido un nico y autnomo de comandos. Este captulo es el primero de los dos que muestran cmo dos o ms comandos SELECT puede ser combinan en un comunicado. La primera tcnica (cubierto en este captulo) es el uso de subconsultas. Una subconsulta es una instruccin SELECT cuya salida se utiliza como entrada a otra sentencia SELECT (o incluso a una sentencia DML, como se hace en el captulo 10).La segunda tcnica es el uso de conjunto los operadores, donde los resultados de varios comandos SELECT se combinan en un solo conjunto de resultados.

OBJETIVO DE CERTIFICACIN 8,01

Definir subconsultas Una subconsulta es una consulta que est anidado dentro de un SELECT, INSERT, UPDATE o DELETE declaracin o dentro de otra subconsulta. Una subconsulta puede devolver un conjunto de filas o simplemente un remar a su consulta primaria. Una subconsulta escalar es una consulta que devuelve exactamente un valor: una sola fila, con una sola columna. Subconsultas escalares se pueden utilizar en la mayora de los lugares en los una sentencia SQL, donde se puede utilizar una expresin o un valor literal. Los lugares en una consulta que puede ser una subconsulta utilizados son los siguientes: En la lista SELECT utilizada para la proyeccin de la columna En la clusula FROM En la clusula WHERE En la clusula HAVING

Una subconsulta se refiere a menudo como un interior consulta, y la declaracin en que se produce entonces se llama la consulta externa. No hay nada errneo en la terminologa, excepto que puede implica que slo puede tener dos niveles, internos y exterior. De hecho, la aplicacin de Oracle subconsultas no impone lmites prcticos en el nivel de anidamiento: la profundidad del anidamiento permitida en la clusula FROM de una instruccin es ilimitado, y que en la clusula WHERE es hasta 255. EXAM Las subconsultas pueden anidarse a una profundidad ilimitada en una clusula FROM pero a "slo" 255 niveles en un WHERE clusula. Se pueden utilizar en el SELECT y en la lista de FROM, WHERE, y HAVING de una consulta.

Una subconsulta puede tener cualquiera de las clusulas habitual es para la seleccin y proyeccin.

Las siguientes son las clusulas necesarias: Una lista SELECT Una clusula FROM Las siguientes son las clusulas opcionales: WHERE GROUP BY HAVING La subconsulta (o subconsultas) dentro de una sentencia debe ser ejecutada antes de la consulta primaria que se llama, a fin de que los resultados de la subconsulta se puede pasar a la matriz.

Tipos de Subconsultas En este ejercicio, usted va a escribir cdigo que muestra los lugares donde subconsultas se puede utilizar. Utilice SQL * Plus o SQL Developer. Todas las consultas se debe ejecutar cuando est conectado al esquema HR. 1. Inicie sesin en su base de datos de recursos humanos del usuario. 2. Escriba una consulta que utiliza subconsultas en la lista de proyeccin de la columna. La consulta presentar un informe sobre los nmeros actuales de los departamentos y el personal: select sysdate Today, (select count(*) from departments) Dept_count, (select count(*) from employees) Emp_count from dual; 3. Escribir una consulta para identificar a todos los empleados que son administradores. Esto se requerir el uso de una subconsulta en la clusula WHERE para seleccionar todos los empleados cuyos EMPLOYEE_ID aparece como un MANAGER_ID:

select last_name from employees where (employee_id in (select manager_id from employees)); 4. Escribir una consulta para identificar el salario ms alto pagado en cada pas. Para ello ser necesario usar una subconsulta en la clusula FROM: select max(salary),country_id from (select salary,department_id,location_id,country_id from employees natural join departments natural join locations) group by country_id;

OBJETIVO DE CERTIFICACIN 8,02 Describir los tipos de problemas Que las subconsultas puede resolver Hay muchas situaciones en las que va a necesitar el resultado de una consulta como la entrada por otro. El uso de un resultado de la subconsulta Establecer, a efectos comparativos Qu empleados tienen un sueldo que es menor que el salario promedio? Esto podra ser contestada por dos estados, o por una sola sentencia con una subconsulta. El siguiente ejemplo utiliza dos declaraciones: select avg(salary) from employees; select last_name from employees where salary < result_of_previous_query ; Por otra parte, este ejemplo se utiliza una sentencia con una subconsulta: select last_name from employees where salary < (select avg(salary)from employees); En este ejemplo, la subconsulta se utiliza para sustituir un valor en la clusula WHERE de la consulta primaria: se devuelve un valor nico, que se utiliza para la comparacin con las filas recuperadas por la consulta de los padres. La subconsulta puede devolver un conjunto de filas. Por ejemplo, usted podra utilizar el siguiente para buscar todos los departamentos que tienen en realidad uno o ms empleados se les asigna:

select department_name from departments where department_id in (select distinct(department_id) from employees); En el ejemplo anterior, la subconsulta se utiliza como una alternativa a una unin. la mismo resultado se podra haber logrado con la siguiente: select department_name from departments where department_id in (select distinct(department_id) from employees); En el ejemplo anterior, la subconsulta se utiliza como una alternativa a una unin. El mismo resultado se podra haber logrado con la siguiente: select department_name from departments inner join employees on employees.department_id = departments.department_id group by department_name; Si la subconsulta se va a volver ms de una fila, entonces el operador de comparacin debe ser capaz de aceptar varios valores. Estos operadores son, no como, CUALQUIER y TODO. Si el operador de comparacin es igual, mayor que o menor DE (que cada uno slo puede aceptar un valor), la consulta de los padres se producir un error. El uso de NOT IN est plagada de problemas debido a la manera de SQL se encarga de NULL. Como regla general, no uso, si no, a menos que est seguro de que el conjunto de resultados no incluir un valor NULL.

Estrella de la Transformacin

Una extensin del uso de subconsultas como una alternativa a una unin es para permitir la estrella transformacin a menudo es necesario en aplicaciones de almacenamiento de datos. Considere la posibilidad de una gran mesa ventas de grabacin. Cada venta est marcado como de un determinado producto a un particular, comprador a travs de un canal en particular. Estos atributos se identifican por los cdigos, usado como claves externas a las tablas de dimensiones, con filas que describen cada

producto, el comprador y canal. Para identificar todas las ventas de libros a los compradores en Alemania a travs de pedidos por Internet, se podra ejecutar una consulta como esta: select from sales s, products p, buyers b, channels c where s.prod_code=p.prod_code and s.buy_code=b.buy_code and s.chan_code=c.chan_code and p.product=Books and b.country=Germany and c.channel=Internet;

Esta consulta utiliza la clusula WHERE para combinar las tablas y luego para filtrar los resultados. La siguiente es una consulta alternativa que dar el mismo resultado: select from sales where prod_code in (select prod_code from products where product=Books) and buy_code in (select buy_code from buyers where country=Germany) and chan_code in (select chan_code from channels where channel=Internet);

La reescritura de la primera declaracin ante el segundo es la transformacin de estrella. Aparte de ser una estructura inherentemente ms elegante (la mayora delos desarrolladores de SQL con cualquier sentido de la esttica que de acuerdo con eso), hay razones tcnicas por las que la base de datos puede ser capaz de ejecutar ms eficientemente que la consulta original. Adems, las consultas de estrellas son ms fciles de mantener, es muy sencillo aadir ms dimensiones a la consulta o para sustituir los literales simples ('Libros', 'Alemania', y 'Internet') con listas de valores. No es un parmetro de inicializacin ejemplo,STAR_TRANSFORMATION_ENABLED, que (si es true) permitir que el optimizador de consultas de Oracle para re-escribir el cdigo en las consultas de la estrella. Generar una tabla desde la que SELECT subconsultas tambin se puede utilizar en la clusula FROM, donde a veces se conoce como puntos de vista en

lnea. Considere la posibilidad de otro problema basado en el esquema de recursos humanos: los empleados estn asignados a un departamento, y los departamentos tienen un lugar. Cada lugar est en una pas. Cmo puede saber el salario promedio del personal en un pas, a pesar de que trabajan para diferentes departamentos? De esta manera: select avg(salary),country_id from (select salary,department_id,location_id,country_id from employees natural join departments natural join locations) group by country_id; La subconsulta construye una tabla con el salario de cada empleadoy el pas en el que se basa su departamento. La consulta de los padres luego se dirige esta tabla, con un promedio el salario y la agrupacin por country_id.

Generar valores de proyeccin El tercer lugar de una subconsulta puede ir en la lista SELECT de una consulta. Cmo se puede identificar el salario ms alto y la tasa de comisin ms alta y por lo tanto lo que la comisin mximaser pagada si el empleado a sueldo ms alto tambin tuvo la ms alta la tasa de comisin? As, con dos subconsultas: select (select max(salary) from employees) * (select max(commission_pct) from employees) / 100 from dual; En este uso, la lista SELECT utilizada para las columnas de los proyectos se rellena con los resultados de las subconsultas. Una subconsulta utiliza de esta manera debe ser escalar, o la consulta de los padres se producir un error. Generar las filas que se pasa a una sentencia DML DML se tratan en detalle en el captulo 10. Por ahora, tenga en cuenta los siguientes ejemplos: insert into sales_hist select * from sales where date > sysdate-1; update employees set salary = (select avg(salary) from employees);

delete from departments where department_id not in (select department_id from employees); EXAM Una subconsulta puede ser utilizado para seleccionar filas para la insercin, pero no en una VALORES clusula de una instruccin INSERT.

El primer ejemplo se utiliza una subconsulta para identificar una un conjunto de filas de una tabla que se inserta en otro. El segundo ejemplo se utiliza una subconsulta para calcular el salario promedio de todos los empleados y pasa este valor (una cantidad escalar) a una actualizacin declaracin. El tercer ejemplo se utiliza una subconsulta para recuperar todos los DEPARTMENT_IDs que estn en uso y pasa la lista a un comando DELETE, que eliminar todos los departamentos que no estn en uso. Tenga en cuenta que no es legal usar una subconsulta en la clusula VALUES de una insercin declaracin, esto est muy bien:
insert into dates select sysdate from dual;

Pero esto no es:


insert into dates (date_col) values (select sysdate fom dual);

EJERCICIO 8.2 Subconsultas ms complejos En este ejercicio, vamos a escribir algunas subconsultas ms complicadas. Utilice SQL * Plus o SQL Developer. Todas las consultas se debe ejecutarcuando se conecta a la De recursos humanos de esquema. 1. Inicie sesin en su base de datos de recursos humanos del usuario. 2. Escriba una consulta que va a identificar a todos los empleados que trabajan en los departamentos localizado en el Reino Unido. Esto requerir tres niveles deanidado subconsultas:

select last_name from employees where department_id in (select department_id from departments where location_id in (select location_id from locations where country_id = (select country_id from countries where country_name=United Kingdom) ) );

3. Compruebe que el resultado del paso 2 es correcta mediante la ejecucin de las subconsultas de forma independiente. En primer lugar, encontrar el country_id para el Reino Unido:
select country_id from countries where country_name=United Kingdom;

El resultado ser Reino Unido. A continuacin, busque los lugarescorrespondientes:


select location_id from locations where country_id = UK;

Los LOCATION_IDs devuelto ser 2400, 2500 y 2600. A continuacin, busque la DEPARTMENT_IDs de departamento en las siguientes ubicaciones:
select department_id from departments where location_id in (2400,2500,2600);

El resultado ser dos departamentos, 40 y 80. Por ltimo, encontrar a los empleados relevantes:
select last_name from employees where department_id in (40,80);

4. Escribir una consulta para identificar a todos los empleados que ganan ms que el promedio y que trabajan en cualquiera de los departamentos de TI. Esto requerir dos subconsultas, no anidadas:
select last_name from employees where department_id in (select department_id from departments where department_name like IT%) and salary > (select avg(salary) from employees);

OBJETIVO DE CERTIFICACIN 8,03 Enumere los tipos de subconsultas Hay tres grandes divisiones de la subconsulta: Los hilera de subconsultas Las filas mltiples subconsultas subconsultas correlacionadas

Subconsultas nicas y mltiples de fila La subconsulta de una sola fila devuelve una fila. Un caso especiales la subconsulta escalar, que devuelve una sola fila con una columna. Subconsultas escalaresson aceptables (y con frecuencia muy til) en prcticamente cualquier situacin en la que se puede utilizar un valor literal, una constante, o una expresin. Fila de mltiples subconsultas devolver conjuntosde filas. Estas consultas son comnmente utilizado para generar los conjuntos de resultados que se pasarn a un LMD o SELECT declaracin para su posterior procesamiento. Ambos subconsultasde una sola fila y mltiples filas ser evala una vez, antes de la consulta primaria se ejecuta. Subconsultas nicas y mltiples de filas puede ser utilizado en el WHERE y HAVING clusulas de la consulta los padres, pero hay restricciones sobre la equiparacin legal los operadores. Si el operador de comparacin es cualquiera de los seres en la tabla siguiente, el subconsulta debe ser una subconsulta de una sola fila:

smbolo = > >= < <= <> !=

Significado igual Mayor que Mayor o igual Menor que Menor o igual No es igual No es igual

Si alguno de los operadores de la tabla anterior se utilizan con una subconsulta que devuelve ms de una fila, la consulta se producir un error. Los operadores en la siguiente tabla se puede utilizar fila de varias subconsultas: Smbolo IN NOT IN ANY ALL lista Significado igual a cualquier miembro de una lista no es igual a cualquier miembro de una lista devuelve las filas que coinciden con cualquier valor en una lista devuelve las filas que coincidan con todos los valores en una

EXAM

Los operadores de comparacin vlido para subconsultas de una sola fila son =,>,> =, <, <=, Y <>. Los operadores de comparacin vlido para subconsultas de registro de mltiples se encuentra, Bajo ningn concepto, y ALL.

subconsultas correlacionadas Una subconsulta correlacionada tiene un mtodo ms complejo de la ejecucin de un solo y fila de varias subconsultas y es potencialmente mucho ms poderoso. Si una subconsulta columnas referencias en la consulta primaria, a continuacin, su resultado ser dependiente del los padres de la consulta. Esto hace que sea imposible evaluar la subconsulta antes de evaluar la consulta de los padres. Considere la posibilidad de esta declaracin, que enumera todos los empleados que ganan menos que el salario medio:
select last_name from employees where salary < (select avg(salary) from employees);

La subconsulta de una sola fila slo necesita ser ejecutado una vez, y sustituido su resultado en la consulta de los padres. Pero consideremos ahora una consulta que mostrar una lista de todos los empleados cuyos salario es menor que el salario promedio de su departamento. En este caso, la subconsulta se debe ejecutar para cada empleado para determinar el salario promedio de su departamento; es necesario pasar el cdigo del empleado del departamento de la subconsulta. Esto puede ser hace como sigue:
select p.last_name, p.department_id from employees p where p.salary < (select avg(s.salary) from employees s where s.department_id=p.department_id);

En este ejemplo, la subconsulta hace referencia a una columna,p.department_id, desde la lista de seleccin de la consulta primaria. Esta es la seal que, en lugar de evaluar el subconsulta una vez, debe ser evaluada para cada fila de la consulta primaria. Para ejecutar la consulta, Oracle se ver en todas las filas de los trabajadores y, al hacerlo, corren el

subconsulta utilizando la DEPARTMENT_ID de la fila de empleados actuales. El flujo de ejecucin es la siguiente:


1. Comienza en la primera fila de la tabla EMPLEADOS. 2. Lea el DEPARTMENT_ID y sueldo de la fila actual. 3. Ejecutar la subconsulta utilizando la DEPARTMENT_ID desde el paso 2. 4. Compare el resultado del paso 3 con el sueldo desde el paso 2,y devolver el la fila si el salario es menor que el resultado. 5. Avanzar a la siguiente fila de la tabla EMPLEADOS. 6. Repita el paso 2. Una subconsulta de una sola fila o varias filas se evala una vez,antes de evaluar la consulta externa, una subconsulta correlacionada deben ser evaluados una vez por cada fila de la consulta externa. Una subconsulta correlacionada puede ser de una o varias filas, si la comparacin operador es apropiado. En el trabajo

Subconsultas correlacionadas puede ser una construccin muy ineficaz, debido a la necesidad para la ejecucin repetida de la subconsulta. Siempre tratar de encontrar una alternativa enfoque.
EJERCICIO 3.8 Investigar los diferentes tipos de subconsultas En este ejercicio, vamos a demostrar los problemas que pueden ocurrir con diferentes tipos de las subconsultas. Utilice SQL * Plus o SQL Developer. Todas las consultas se debe ejecutar cuando se conecta con el esquema de recursos humanos: se supone que la tabla empleados tiene los conjuntos estndar de filas. 1. Inicie sesin en su base de datos de recursos humanos del usuario. 2. Escribir una consulta para determinar quin gana ms que el Sr.Tobas:
select last_name from employees where salary > (select salary from employees where last_name=Tobias) order by last_name;

Esto devolver 86 nombres, en orden alfabtico. 3. Escribir una consulta para determinar quin gana ms que el Sr. Taylor:
select last_name from employees where salary > (select salary from employees where last_name=Taylor) order by last_name;

Esto producir un error con el error "ORA-01427: una sola fila subconsulta devuelve ms de una fila. "La siguiente ilustracin muestra las ltimas lneas de la salida de paso 2, seguido por el paso 3 y el error, ejecutado con SQL * Plus.

4. Determinar por qu la consulta en el paso 2, pero no tuvo xito en el paso 3. La respuesta se encuentra en el estado de los datos:
select count(last_name) from employees where last_name=Tobias; select count(last_name) from employees where last_name=Taylor;

El uso de la "mayor que" en las consultas de los pasos 2 y 3requiere una subconsulta de una sola fila, pero la subconsulta utilizada puede devolver cualquier nmero de filas, segn el predicado de bsqueda utilizado. 5. Fijar el cdigo en los pasos 2 y 3, para que los estados tendrn xito, no importa lo LAST_NAME se utiliza. Hay dos soluciones posibles: uno utiliza un operador de comparacin distinto que puede manejar una de varias filas subconsulta, y el otro utiliza una subconsulta que siempre va a ser de una sola fila. La primera solucin:
select last_name from employees where salary > all (select salary from employees where last_name=Taylor) order by last_name;

La segunda solucin:
select last_name from employees where salary > (select max(salary) from employees where last_name=Taylor) order by last_name;

ESCENARIO Y SOLUCIN Cmo se puede mejores subconsultas de diseo de tal manera que No se producir el "ORA-01427: una sola fila subconsulta devuelve ms de una fila "errores? R/ Existen dos tcnicas comunes: que agregue de modo que si usted consigue varias filas que se reducir a uno, o utilizar uno de los en, cualquier, o todos los operadores de modo que no importa si varias filas se devuelven. Pero stas son soluciones tanto los hackers, la verdadera respuesta es siempre usar la clave principal en la identificacin de la fila que se devuelve, no una clave no nico.

A veces se puede elegir entre usar un subconsulta o utilizar alguna otra tcnica: la estrella la transformacin es un ejemplo de ello. Qu es mejor? R/ Depende de las circunstancias. No es raro que para las diferentes tcnicas para causar una diferente ejecucin del mtodo dentro de la base de datos. dependiendo de cmo el ejemplo, la base de datos, y los datos estructuras dentro de ella se configuran, una puede ser mucho ms eficiente que otro. Siempre que tal eleccin surge, los estados deben ser sometidos a una sintonizacin anlisis. El DBA ser capaz de asesorar sobre esto.

OBJETIVO DE CERTIFICACIN 8,04 Escribir Subconsultas de una sola fila y de varias filasLos siguientes son ejemplos de subconsultas de una y varias filas. Se basan en el esquema de demostracin de recursos humanos. Cmo entender que los empleados tienen un gerente que trabaja para un departamento con sede en el Reino Unido? Esta es una solucin posible, utilizando fila de varias subconsultas:

select last_name from employees where manager_id in (select employee_id from employees where department_id in (select department_id from departments where location_id in (select location_id from locations where country_id=UK)));

En el ejemplo anterior, subconsultas estn anidados tres niveles de profundidad. Tenga en cuenta que las subconsultas utilizar el operador IN, porque es posible que las consultas podran retornarvarias filas. Se le ha pedido para encontrar el trabajo con el salario ms altopromedio. Esto puede hacerse con una sola fila-subconsulta:
select job_title from jobs natural join employees group by job_title having avg(salary) = (select max(avg(salary)) from employees group by job_id);

La subconsulta devuelve un nico valor: el salario promedio del departamento con el mayor salario promedio. Es seguro usar el operador de igualdad para esta subconsulta, porque la funcin MAX garantiza que slo una fila ser devuelta. Los operadores ANY y ALL es la sintaxis compatible, pero su funcin puede ser duplicado con otros operadores ms comnmente utilizados en combinacin con las agregaciones. Por ejemplo, estas dos declaraciones, que recuperar todos los empleados cuyo salario es superior a la de cualquier persona en el departamento 80, volver juegos idnticos resultados:
select last_name from employees where salary > all (select salary from employees where department_id=80); select last_name from employees where salary > (select max(salary) from employees where department_id=80);

La siguiente tabla resume los equivalentes de cualquier y todos:

operador <ANY > ANY = ANY > ALL <ALL

Significado inferior a la mayor ms que la ms baja equivalente a IN ms de la ms alta menos de la ms baja

EJERCICIO 8.4 Escribir una consulta que es fiable y fcil de

En este ejercicio, desarrollar una subconsulta multi-fila que le pedir la intervencin del usuario. Utilice SQL * Plus o SQL Developer. Todas las consultas se debe ejecutar cuando se conecta a la esquema HR; se supone que las tablas tienen losconjuntos estndar de filas. 1. Inicie sesin en su base de datos de recursos humanos del usuario. 2. Disear una consulta que le solicitar un nombre de departamento y una lista de los apellidos de cada empleado en ese departamento:

select last_name from employees where department_id = (select department_id from departments where department_name = &Department_name);

3. Ejecutar la consulta en el paso 2 tres veces, cuando se le soliciteel suministro de estos valores: primera vez, Ejecutivo segunda vez, el ejecutivo tercera vez, Executiv La siguiente ilustracin muestra el resultado, utilizando SQL * Plus:

4. Tenga en cuenta los resultados del paso 3. La primera carreratuvo xito debido a que el valor introducido fue una coincidencia exacta, pero no el otro. Ajustar la

consulta para que sea ms fcil de usar, de manera que puede manejar variaciones menores en el caso o la ortografa:
select last_name from employees where department_id = (select department_id from departments where upper(department_name) like upper(%&Department_name%));

5. Ejecutar la consulta en el paso 4 tres veces, con los mismos valores que se utiliza en el paso 3. Esta vez, la consulta se ejecute correctamente. 6. Ejecutar la consulta en 4 pasos de nuevo, y esta vez entrar en el valor de Pu. La consulta va a fracasar, con un "ORA-01427: una sola fila subconsulta devuelve ms de una fila" de error, debido a que el intento de hacer ms fciles de usar los medios que la subconsulta ya no se garantiza que sea una subconsulta de una sola fila. El Pu cadena coincide con dos departamentos.
7. Ajustar la consulta para que sea resistente contra el errorORA-01427, y ajustar la salida para evitar cualquier posible confusin:
select last_name,department_name from employees join departments on employees.department_id = departments.department_id where departments.department_id in (select department_id from departments where upper(department_name) like upper(%&Department_name%));

La siguiente ilustracin muestra este paso final: el cdigo que se est acercando al ideal de ser a la vez a prueba de balas y fcil de usar:

EN EL INTERIOR DEL EXAMEN


El uso de subconsultas Subconsultas vienen en tres formas generales: una sola fila, varias filas, y correlacionados. Un caso especial de la subconsulta de una sola fila es la subconsulta escalar, una subconsulta que devuelve exactamente un valor. Esta es una columna de una sola hilera subconsulta. Para la primera OCP SQL examen, el conocimiento detallado que se espera slo de las subconsultas escalares y nica columnafila de varias subconsultas. subconsultas correlacionadas y subconsultas de mltiples columnas es poco probable que deben examinarse en este nivel, pero en general un conocimiento de ellos puede ser probado. Al utilizar subconsultas en una clusula WHERE, usted debe ser consciente de que los operadores se tener xito con subconsultas de registro nico y que tendr xito con subconsultas de varias filas. RESUMEN DE CERTIFICACIN Una subconsulta es una consulta incrustada en otra sentencia de SQL. Esta afirmacin puede ser otra consulta o una instruccin DML. Las subconsultas pueden anidarse unos dentro de otros sin lmites prcticos. Subconsultas puede ser utilizado para generar los valores de la lista de seleccin de una consulta para generar una vista en lnea para ser utilizado en la clusula FROM, en la clusula WHERE, y en el La clusula HAVING. Cuando se utiliza en el WHERE o HAVING, de una sola fila subconsultas se pueden utilizar con estos operadores de comparacin: =,>,> =, <, <=, <>; fila de varias subconsultas se pueden utilizar con estos operadores de comparacin: IN, NOT IN, ANY, ALL.

DOS MINUTOS DE PERFORACIN Definir subconsultas Una subconsulta es una instruccin de seleccin integradadentro de otra sentencia SQL. Las subconsultas pueden anidarse uno dentro del otro.

Con la excepcin de la subconsulta correlacionada, las subconsultas se ejecutan antes la consulta externa en el que estn inmersos. Describir los tipos de problemas que pueden resolver lassubconsultas Los Seleccionar filas de una tabla con una condicin quedepende de los datos dentro de la mesa se puede implementar con una subconsulta. Complejo une a veces puede ser reemplazado con subconsultas. Las subconsultas pueden aadir valores a la salida de la consulta externa que no estn disponibles en las tablas de las direcciones de consulta externa. Enumere los tipos de subconsultas Las filas mltiples subconsultas pueden devolver varias filas, posiblemente con varias columnas. Las subconsultas de una sola fila devolver una fila, posiblemente con varias columnas. Una subconsulta escalar devuelve un solo valor, sino que es unasola fila y una sola columna subconsulta. Una subconsulta correlacionada se ejecuta una vez para cada fila de la consulta externa. Escribir Subconsultas de una sola fila y de varias filas Los hilera de subconsultas se debe utilizar con los operadores de comparacin de una hilera. Las filas mltiples subconsultas se debe utilizar con los operadores de comparacin de filas mltiples. Los operadores de todas y cualesquiera pueden ser alternativaspara el uso de agregaciones. TEST DE AUTO Definir subconsultas 1. Considere esta descripcin genrica de una sentencia SELECT: SELECT select_list FROM tabla condicin WHERE GROUP BY expresin_1 VISTO expresion_2 ORDER BY expression_3; Dnde podra utilizar subconsultas? (Elija todas las respuestas correctas.) A. select_list B. tabla C. condicin D. expresin_1

E. expresion_2 F. expression_3

2. Una consulta puede tener una subconsulta incrustado en su interior. En qu circunstancias podra haber ms de una subconsulta? (Elija la mejor respuesta.) A. La consulta externa puede incluir una consulta interna. No es posible tener otra consulta dentro la consulta interna. B. Es posible incluir una subconsulta de una sola fila dentro de una subconsulta de varias filas, pero no la todo lo contrario. C. La consulta externa puede tener varias consultas internas, pero no deben ser incorporados dentro de entre s Subconsultas D. puede ser embebido dentro de unos a otros sinlimitaciones prcticas en profundidad. 3. Considere la siguiente declaracin:
select employee_id, last_name from employees where salary > (select avg(salary) from employees);

Cuando se la subconsulta se ejecuta? (Elija la mejor respuesta.) A. Se ejecuta antes de la consulta externa. B. se ejecutar despus de la consulta externa. C. Se ejecuta simultneamente con la consulta externa. D. se ejecutar una vez por cada fila de la tabla EMPLEADOS.

4. Considere la siguiente declaracin:


select o.employee_id, o.last_name from employees o where o.salary > (select avg(i.salary) from employees i where i.department_id=o.department_id);

Cuando se la subconsulta se ejecuta? (Elija la mejor respuesta.) A. Se ejecuta antes de la consulta externa. B. se ejecutar despus de la consulta externa. C. Se ejecuta simultneamente con la consulta externa. D. se ejecutar una vez por cada fila de la tabla EMPLEADOS. Describir los tipos de problemas que pueden resolver lassubconsultas 5. Considere la siguiente declaracin:
select last_name from employees join departments on employees.department_id = departments.department_id where department_name=Executive;

y esta declaracin:
select last_name from employees where department_id in

(select department_id from departments where department_name=Executive);

Qu puede decirse acerca de las dos declaraciones? (Elija dos respuestas correctas.) A. Los dos estados debe generar el mismo resultado. B. Las dos declaraciones podra generar resultados diferentes. C. La primera sentencia se ejecutar siempre con xito, la segunda instruccin se si hay error dos departamentos con DEPARTMENT_NAME 'Ejecutivo'. D. Ambas declaraciones se ejecutar siempre con xito, incluso si hay dos departamentos con DEPARTMENT_NAME 'Ejecutivo'. Enumere los tipos de subconsultas 6. Cules son las caractersticas distintivas de una subconsulta escalar? (Elija dos respuestas correctas.) A. Una subconsulta escalar devuelve una fila. B. Una subconsulta escalar devuelve una columna. C. Una subconsulta escalar no se puede utilizar en la lista SELECTde la consulta primaria. D. Una subconsulta escalar no puede ser utilizado como unasubconsulta correlacionada. 7. Qu operador de comparacin no puede ser utilizado con subconsultas de varias filas? (Elija la mejor respuesta.) A. Todos los B. CUALQUIER C. IN D. NO EN E. Todo lo anterior puede ser utilizado. Escribir Subconsultas de una sola fila y de varias filas8. Considere la siguiente declaracin: seleccione apellido, (select count (*) de los departamentos) de los empleados donde el salario = (salario de seleccin de los empleados); Cul es el problema? (Elija la mejor respuesta.) R. Nada est mal, la declaracin se debe ejecutar sin errores. B. La declaracin se producir un error porque la subconsulta en las referencias de la lista SELECT de una tabla que es que no figuran en la clusula FROM. C. La declaracin se producir un error si la segunda consulta devuelve ms de una fila. D. La instruccin se ejecutar, pero es extremadamente ineficaz debido a la necesidad de ejecutar la segunda subconsulta de una vez por cada fila de los empleados. 9. Cul de las siguientes afirmaciones son equivalentes? (Elijados respuestas.) A. seleccin employee_id de los empleados que el salario <todasalario (seleccin de los empleados cuando department_id = 10); B. Seleccione employee_id de los empleados que el salario<(SELECT MIN (salario) de los

empleados donde department_id = 10); C. employee_id seleccin de los empleados que no sueldo> = cualquier salario (seleccin de los empleados donde department_id = 10); D. Seleccione employee_id de los empleados e unirse a los departamentos de d = e.department_id d.department_id donde e.salary <(SELECT MIN (salario) de los empleados) y d.department_id = 10; 10. Considere la posibilidad de esta declaracin, que se destina a preguntar por el nombre de un empleado y, a continuacinencontrar toda los empleados que tienen el mismo trabajo que el primer empleado: seleccione apellido, employee_id de los empleados en job_id = (seleccione job_id de los empleados, donde 'nombre =' & nombre '); Qu pasara si un valor se les dio de Nombre y de que no se corresponda con ninguna fila en EMPLEADOS? (Elija la mejor respuesta.) A. La declaracin se producir un error. B. La declaracin se vuelven cada fila de la tabla. C. La declaracin de que no devuelven ninguna fila. D. La declaracin sera devolver todas las filas en las que job_id es nulo.

LAB PREGUNTA Ejercicio 8-3 incluido esta consulta que trat de encontrar a todos los empleados cuyo salario es mayor que la de un empleado de nominados: seleccione apellidos de los empleados cuando > Salario (salario de seleccin de los empleados, donde 'nombre=' Taylor ') ordenar por apellido; La consulta se ejecuta correctamente si apellido es nico. Dos variaciones fueron dado que se ejecutar sin error, no importa qu valor se proporciona. La primera solucin fue la siguiente: seleccione apellidos de los empleados cuando salarial> todos (salario de los empleados de seleccin, donde'nombre =' Taylor ') ordenar por apellido; La segunda solucin fue la siguiente: seleccione apellidos de los empleados cuando salario> (select max (salario) de los empleados, donde 'nombre ='Taylor ') ordenar por apellido; Hay otras consultas que se ejecutan con xito, la construccin deotras dos soluciones, una con el Cualquier operador de comparacin, el otro que utiliza la funcin de

agregacin MIN. Ahora que ya tiene cuatro soluciones, no todos dan el mismo resultado? Todas estas "soluciones" son de hecho slo las formas de evitar el error. No necesariamente para obtener el resultado el usuario quiere, y no puede ser consistente. Qu cambio hay que hacer para dar una respuesta coherente, resultado inequvoco,? RESPUESTAS DE AUTO TEST Definir Subconsultas 1. A, B, C, D, Subconsultas coli se puede utilizar en todos estos puntos. F. Una subconsulta no puede ser utilizado en la clusula ORDER BY de una consulta. 2. subconsulta D. anidacin se puede hacer a muchos niveles. A, B y C. A y C son incorrectas ya que las subconsultas se pueden anidar. B es incorrecta porque la nmero de filas devueltas no es relevante para anidar subconsultas, slo para los operadores que se utilizan. 3. A. El conjunto de resultados de la consulta interna que se necesita antes la consulta externa se puede ejecutar. B, C y D. B y C no son posibles debido a que el resultado de la subconsulta es necesaria antes de la consulta de los padres puede comenzar. D es incorrecta porque la subconsulta slo se ejecuta tiempo. 4. D. Se trata de una subconsulta correlacionada, lo que se debe ejecutar para cada fila de la tabla. A, B y C. El resultado de la consulta interna depende de un valor de la consulta externa, sino que por lo tanto, debe ejecutarse una vez para cada fila. Describir los tipos de problemas que pueden resolver las subconsultas 5. A, D. Las dos declaraciones se entregar el mismo resultado, y no se producir un error si el nombre de se duplica. B, C, B es incorrecta porque las declaraciones son funcionalmente idnticos, aunque sintcticamente diferente. C es incorrecta porque el operador de comparacin utilizado, EN, puede manejar una subconsulta de varios registros. Enumere los tipos de subconsultas 6. A y B. Una subconsulta escalar puede ser definido como una consulta que devuelve un solo valor. C, D. C es malo porque una subconsulta escalar es la subconsulta nico que puede ser utilizado en el SELECT LIST. D es incorrecta ya que las subconsultas escalares pueden estar correlacionadas. 7. E. ALL, ANY, IN y NOT IN son los operadores de comparacin de mltiples

registros. A, B, C, D. Todos estos pueden ser utilizados. Escribir Subconsultas de una sola fila y de varias filas8. C. El operador de igualdad exige una subconsulta de una sola fila, y podra la segunda subconsulta devolver varias filas. A, B, D. A es incorrecta porque la declaracin se producir un error en todos los casos excepto en el caso improbable de caso donde hay cero o un empleados. B es malo porque esto no es un problema, hay necesita ser ninguna relacin entre la fuente de datos para las consultas de interior y exterior. D es incorrecta porque la subconsulta slo se ejecutar una vez, no es una subconsulta correlacionada. 9. A y B son idnticos. C es lgicamente el mismo que A y B, pero sintcticamente no es posible, sino que dar un error. D siempre devolver ninguna fila, ya que pide a todos los empleados que tienen un salario inferior al de todos los empleados. Este no es un error, pero no puede volver todas las filas. El filtro es DEPARTAMENTOS no es relevante. 10. C. Si una subconsulta devuelve NULL, la comparacin tambin se devolver NULL, lo cual significa que no hay filas se recuperar. A, B, D. A es incorrecta porque no se producir un error. B es incorrecta porque la comparacin con NULL no devolver nada, no todo. D es incorrecta porque la comparacin con NULL no puede volver nunca nada, ni incluso otros valores NULL. LAB RESPUESTA Los siguientes son dos posibles soluciones que utilicen cualquiera y MIN: seleccione apellidos de los empleados cuando salarial> cualquier (salario de seleccin de los empleados, donde'nombre =' Taylor ') ordenar por apellido; seleccione apellidos de los empleados cuando salario no <(SELECT MIN (salario) de los empleados, donde'nombre =' Taylor ') ordenar por apellido; Estas son tan vlidas como las soluciones presentadas anteriormente que utiliza en todo y MAX, pero no lo hacen dan el mismo resultado. No hay manera de decir que estos son mejores o peores que las soluciones anteriores. El problema es que la subconsulta se basa en una columna que no es la clave principal. No sera razonable decir que todas estas soluciones son errneas, y la consulta original es el mejor, sino que da

un resultado que es inequvocamente correcto si el LAST_NAMEes nico y si no es LAST_NAME nica, que arroja un error en lugar de dar una respuestacuestionable. La verdadera respuesta es que la consulta debe basarse en EMPLOYEE_ID no APELLIDOS.

Potrebbero piacerti anche