Date post: | 30-Oct-2015 |
Category: |
Documents |
Upload: | viktor-carranza |
View: | 83 times |
Download: | 5 times |
of 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 filas- subconsultas
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
EXAM
Los operadores de comparacin vlido para subconsultas de una sola fila son =,>,> =,
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 filas-
Los 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 Significado
ANY ms que la ms baja
= ANY equivalente a IN
> ALL ms de la ms alta
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 columna-
fila 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: =,>,> =,
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 filas-
8. 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
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 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 filas-
8. 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
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.