cap-8 uso de subconsultas

Upload: viktor-carranza

Post on 30-Oct-2015

84 views

Category:

Documents


5 download

TRANSCRIPT

  • 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.