SQL_consultas anidadas

download SQL_consultas anidadas

of 6

Transcript of SQL_consultas anidadas

  • 7/25/2019 SQL_consultas anidadas

    1/6

    CONSULTAS ANIDADAS

    Podemos crear concultas anidadas en los que algn valor o valores de la consulta padre esdevuelto por otra consulta hijo.

    La consulta anidada puede devolver uno o msdatos.

    CASO 1 - La consulta anidada devuelve un slo dato.

    En este caso se usarn los operadores =, , =, !=, !asociados a la consulta anidada.

    "#"$%LO &'(Nombre de las asignaturas de la titulacin "!" cu#os costes bsicos sobrepasen el costebsico promedio por asignatura en esa titulacin.

    $ELE%& Nombre '()* +$-N+&(+

    /0E(E %oste1asico 2 3$ELE%& +4-3%oste1asico5

    '()* +$-N+&(+

    /0E(E d&itulacion 6 "!"5

    +N7 d&itulacion 6 "!"8

    CASO )* - La consulta anidada devuelve ms de un valo+.

    $i la consulta anidada devuelve ms de un valor usaremos los operadores IN, NOT INo losoperadores anteriores asociados a cuanti9cadores como ALL# AN,o tambi:n elcuanti9cador "ITS. Estos cuanti9cadores se vern ms adelante a partir del ejemplo ;

  • 7/25/2019 SQL_consultas anidadas

    2/6

    '()* &&L+%)N, +$-N+&(+

    /0E(E &&L+%)N.d&itulacion 6 +$-N+&(+.d&itulacion

    +N7 %reditos 6

  • 7/25/2019 SQL_consultas anidadas

    3/6

    d de los alumnos matriculados en todas las asignaturas de D de Empresariales.

    $ELE%& d+lumno

    '()* +$-N+&(+, +L*N)B+$-N+&(+, &&L+%)N

    /0E(E +L*N)B+$-N+&(+.d+signatura 6 +$-N+&(+.d+signatura

    +N7 +$-N+&(+.d&itulacion 6 &&L+%)N.d&itulacion

    +N7 %urso 6 ""

    -()P 1 d+lumno

    0+4N- %)N&3d+lumno5 6 3$ELE%& %)N&3d+signatura5

    '()* +$-N+&(+, &&L+%)N

    /0E(E +$-N+&(+.d&itulacion 6 &&L+%)N.d&itulacion

    +N7 &&L+%)N.Nombre 6 "Empresariales"

    +N7 %urso 6 ""58

    CUANTIFICADOR ALL.

    Se utilizar de forma conjunta con una consulta anidada que devuelva ms de un valor y un operador de comparacin quno sea la igualdadSirve para seleccionar los valores que cumplan una determinada condicin para todoslos valores de la consulta anidada(No se suele utilizar con igualdad

    EJEMPLO 53Nombre de las asignaturas que tengan ms crditos.

    SELECTNombre FROMASIGNATURA WHERECreditos>= ALL (SELECTCreditos FROMASIGNATURA);tra forma! SELECTNombre FROMASIGNATURA WHERECreditos=(SELECTMA(Creditos) FROMASIGNATURA);

    EJEMPLO 54"ersonas que viven en la ciudad que vive ms gente. SELECT! FROM"ERSONA WHERECi#d$dIN (SELECTCi#d$d FROM"ERSONA

    GROU" %&Ci#d$d HA'INGCOUNT(!) >= ALL (SELECTCOUNT(!) FROM"ERSONA GROU" %&Ci#d$d));

    CUANTIFICADOR ANY.

    #n conjuncin con una consulta anidada que devuelve varios valores$ sirve para determinar cuando una determinadcondicin se verifica para al menos uno de los valores que devuelve la subconsulta. (No se suele utilizar con desigualdad)

  • 7/25/2019 SQL_consultas anidadas

    4/6

    EJEMPLO 54B"ersonas que viven en cualquier ciudad e%cepto en la que vive ms gente. SELECT! FROM"ERSONA WHERECi#d$dIN (SELECTCi#d$d FROM"ERSONA

    GROU" %&Ci#d$d HA'INGCOUNT(!) AN& (SELECTCOUNT(!) FROM"ERSONA GROU" %&Ci#d$d));

    CUANTIFICADOR EXISTS.

    #n conjuncin con una consulta anidada sirve para determinar si e%isten filas en dic&a subconsulta. "odemos utilizaanlogamente NOT EXISTS

    #ste tipo de consultas se llaman correlacionadasya que &ay una relaccin entre la consulta principal y la subconsulta

    EJEMPLO 55'ista de asignaturas en las que no se &a matriculado nadie. SELECT! FROMASIGNATURA WHERENOT EISTS (SELECT! FROMALUMNOASIGNATURA WHEREALUMNOASIGNATURA*IdAsi+,$t#r$=ASIGNATURA*IdAsi+,$t#r$);

    EJEMPLO 56iudades en las que vive algn profesor y tambin algn alumno. SELECT-ISTINCTCi#d$d FROM"ERSONAAS""."ROFESOR WHERE""*-NI="ROFESOR*-NI AN- EISTS (SELECT! FROM"ERSONAAS"A.ALUMNO WHERE"A*-NI=ALUMNO*-NI AN-"A*Ci#d$d=""*Ci#d$d);

    tra forma! SELECT-ISTINCT""*Ci#d$d FROM"ERSONAAS""."ROFESOR."ERSONAAS"A.ALUMNO WHERE""*-NI="ROFESOR*-NI AN- "A*-NI=ALUMNO*-NI AN-"A*Ci#d$d=""*Ci#d$d;

    EJEMPLO 57iudades en las que vive algn profesor pero ningn alumno. SELECT-ISTINCTCi#d$d FROM"ERSONAAS""."ROFESOR WHERE""*-NI="ROFESOR*-NI AN- NOT EISTS (SELECT! FROM"ERSONAAS"A.ALUMNO WHERE"A*-NI=ALUMNO*-NI AN-"A*Ci#d$d=""*Ci#d$d);

    OPERADORES DE TIPO CONJUNTO

    Si entendemos las tablas como un conjunto de filas$ podemos entonces aplicar las operaciones bsicas deconjuntos!UNIN$ INTERSECCINy SUSTRACCINsiendo sus equivalentes en S!L UNION$ INTERSECTy MINUS

    ('as dos ltimas no funcionan en ACCESSpero s* en ORACLE)

    Suponiendo que aplicamos alguno de los operadores anteriores a dos tablas Ay B$ stas deben ser compatibles$ es decir

  • 7/25/2019 SQL_consultas anidadas

    5/6

    el nmero y el tipo de las columnas debe ser el mismo

    No es necesario que el nombre de las columnas coincida en ambas tablas.

    #l nombre de la columna resultado A+Bes el mismo que A

    Se pueden aplicar estos operadores a ms de dos tablas a la vez en una misma consulta.

    OPERADOR UNION.

    #l operador UNIONse utilizar para crear una consulta de unin entre dos o ms consultas o tablas independientes.

    #l resultado de esta consulta devuelve la suma de todas las filas de las consultas o tablas implicadas omitiendo aqullasque estn repetidas. "odemos forzar que las tuplas repetidas sean devueltas utilizando el predicado ALL.

    EJEMPLO 5":,ostrar el -N de alumnos y profesores. SELECT-NI FROMALUMNO UNION SELECT-NI

    FROM"ROFESOR;'o mismo pero con filas repetidas! SELECT-NI FROMALUMNO UNIONALL SELECT-NI FROM"ROFESOR;

    EJEMPLO 5#:,ostrar las personas que no son ni profesores ni alumnos. SELECT! FROM"ERSONA WHERE-NINOT IN (SELECT-NI FROMALUMNO UNION

    SELECT-NI FROM"ROFESOR);'a consulta anterior no es aceptada por /#SS. +na variante que devuelve el mismo resultado es la siguiente! SELECT! FROM"ERSONA WHERE-NINOT IN (SELECT-NI FROMALUMNO) AN--NINOT IN (SELECT-NI FROM"ROFESOR);

    EJEMPLO 6$:d de los alumnos matriculados en la asignatura 01234140 o en la 01531150 o en ambas. (gual que el ejemplo 16).%&' &(&)*+o ,7. SELECTIdA/#m,o FROMALUMNOASIGNATURA WHEREIdAsi+,$t#r$=01234140

    UNION SELECTIdA/#m,o FROMALUMNOASIGNATURA WHEREIdAsi+,$t#r$=01531150;

    OPERADOR INTERSECT.

    EJEMPLO 6,:-N de los profesores que tambin son alumnos. (gual que el ejemplo 73).

    ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4d.html#E17ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4d.html#E17
  • 7/25/2019 SQL_consultas anidadas

    6/6

    %&' &(&)*+o 4$. SELECT-NI FROM"ROFESOR INTERSECT SELECT-NI FROMALUMNO;

    'a consulta anterior no funciona en /#SS.

    OPERADOR MINUS.

    EJEMPLO 6-:-N de personas que no son profesores ni alumnos. (gual que el ejemplo 28).%&' &(&)*+o 5#. SELECT-NI FROM"ERSONA MINUS (SELECT-NI FROM"ROFESOR UNION SELECT-NI FROMALUMNO);

    'a consulta anterior no funciona en /#SS

    EJEMPLO 63:'ista de asignaturas en las que no se &a matriculado nadie. (gual que el ejemplo 22).%&' &(&)*+o 55. SELECT! FROMASIGNATURA MINUS SELECTASIGNATURA*! FROMASIGNATURA.ALUMNOASIGNATURA WHEREALUMNOASIGNATURA*IdAsi+,$t#r$=ASIGNATURA*IdAsi+,$t#r$;

    EJEMPLO 64:iudades en las que vive algn profesor y tambin algn alumno. (gual que el ejemplo 29).%&' &(&)*+o 56. SELECTCi#d$d FROM"ROFESOR."ERSONA WHERE"ROFESOR*-NI="ERSONA*-NI INTERSECT SELECTCi#d$d FROMALUMNO."ERSONA WHEREALUMNO*-NI="ERSONA*-NI;

    EJEMPLO 65:iudades en las que vive algn profesor pero ningn alumno. (gual que el ejemplo 26).%&' &(&)*+o 57. SELECTCi#d$d FROM"ROFESOR."ERSONA

    WHERE"ROFESOR*-NI="ERSONA*-NI MINUS SELECTCi#d$d FROMALUMNO."ERSONA WHEREALUMNO*-NI="ERSONA*-NI;

    ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4g.html#E40ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4k.html#E59ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E55ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E56ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E57ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4g.html#E40ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4k.html#E59ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E55ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E56ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-%20sql/Apuntes%20Bloque%20SQL/tema4j.html#E57