Está en la página 1de 4

S QL

SUBCONSULTAS

Subconsultas
Definicin y clasificaciones Donde emplearlas Condiciones de comparacin y subconsultas Ejemplos Definicin y clasificaciones
Una subconsulta es una instruccin SQL llamada desde otra instruccin o desde otra subconsulta. Las subconsultas pueden devolver varios conjuntos de resultados, pudindose clasificar basndose en estos conjuntos como: Una fila/una columna Mltiples filas/una nica columna Mltiples columnas/una nica o mltiples filas

Una subconsulta puede tener un formato regular o correlacionado. Subconsulta regular. Un consulta contenida dentro de otra sin que haya relacin entre ambas. Subconsulta correlacionadas: Correlacionado implica una conexin entre la consulta o subconsulta- que invoca la subconsulta y la propia subconsulta. Hay que tener en cuenta, que la columna correlacionada puede ser pasada de la consulta superior (la externa) a la inferior (la subconsulta interna) y NO al revs. La subconsulta correlacionada depende siempre de la consulta externa.

Las subconsultas pueden definirse tambin como anidadas o vistas en lnea. Subconsulta anidada: Las subconsultas pueden llamar a otras subconsultas, y estas a su vez a otras, as sucesivamente, sin limitacin. Subconsulta vista en lnea: Es una subconsulta embebida dentro de la clusula FROM de la instruccin SELECT que invoca la subconsulta.

Las subconsultas pueden pertenecer a la combinacin de varios tipos de clasificaciones.

Donde emplearlas
Las subconsultas pueden emplearse en casi todas las instrucciones SQL, en cualquier comando SQL donde se pueda emplear una expresin. El siguiente listado muestra las instrucciones SQL donde puede emplearse una subconsulta: Clusula SELECT Clusula WHERE Clusula ORDER BY Clusula FROM (vista en lnea)

CURSO 2005-06

19

S QL Clusula VALUES de la instruccin INSERT Clusula SET de la instruccin UPDATE

SUBCONSULTAS

Condiciones de comparacin y subconsultas


Las subconsultas pueden aplicarse a muchas condiciones de comparacin. Dependiendo del tipo de operador que empleemos, estar permitido un tipo de subconsulta u otro, en funcin del tipo de resultados que esta devuelva. SIMPLE LIKE PERTENENCIA EXISTENCIA RANGO AGRUPACIN

(subconsulta)

(subconsulta) {= | != } (subconsulta) (subconsulta) LIKE (subconsulta) (subconsulta)[NOT] IN (subconsulta) [NOT] EXIST (subconsulta) (subconsulta) BETWEEN (subconsulta) AND (subconsulta) (subconsulta) {= | != | > | < | >= | <= } {ANY | SOME | ALL}

Los operadores marcados, requieren subconsultas que devuelvan una nica fila, como son la igualdad/desigualdad, los operadores de comparacin (<,>,>=,<=), as como los operadores LIKE y BETWEEN. El resto de operadores permiten como resultado de la subconsulta mltiples filas: IN, NOT IN, EXIST, NOT EXIST, adems de los operadores de comparacin combinados con ANY, SOME o ALL. Una subconsulta en si misma, es generalmente equivalente sintcticamente a una instruccin SELECT.

Ejemplos:
A continuacin vamos a ver unos ejemplos de subconsultas:

Subconsultas de una nica fila:


Es una subconsulta que devuelve como resultado una nica fila. Ejemplo:
SELECT * FROM estudiantes WHERE poblacin= (SELECT poblacin FROM estudiantes WHERE dni=33445667);

Subconsultas de una mltiples filas:


Son subconsultas que devuelven como resultado mltiples filas. Es importante tener en cuenta que pueden no devolver ninguna fila, y que el conjunto vaco es un resultado vlido en la pertenencia, existencia o condiciones de agrupacin de comparacin.

20

CURSO 2005-06

S QL Ejemplos:
SELECT * FROM profesores WHERE poblacin IN (SELECT poblacin FROM estudiantes WHERE edad>25); SELECT * FROM estudiantes WHERE edad > ALL (SELECT edad FROM profesores WHERE dpto=Matemticas);

SUBCONSULTAS

Subconsultas de mltiples columnas:


Una subconsulta de mltiples columnas, puede devolver una nica o mltiples filas. Devuelve ms de una columna para cada fila. Suele emplearse para validar un conjunto de columnas con otro en la clusula WHERE, o como vista en lnea en la clusula FROM. Ejemplos:
SELECT * FROM profesores WHERE (nombre, apellidos) IN (SELECT nombre, apellidos FROM estudiantes WHERE edad>25); SELECT E.nia, nombre, apellidos, media FROM estudiantes E, (SELECT nia, AVG(nota) MEDIA FROM suspendidos GROUP BY nia HAVING AVG(nota)<3) SUSP3 WHERE E.nia=SUSP3.nia; CREATE TABLE medias AS (SELECT dni, AVG(notas) media FROM estudiantes GROUP BY dni);

Subconsultas correlacionadas:
Las subconsultas correlacionadas permiten la correlacin o coincidencia de valores entre las columnas de la consulta externa y la subconsulta. La consulta externa puede pasar el valor de una columna a la subconsulta, no siendo posible al revs. Las consultas se van ejecutando de izquierda a derecha y de arriba abajo. Las subconsultas internas se ejecutan antes que las invoquen las externas. Ejemplo:
SELECT nombre FROM estudiante E WHERE 01/01/02 > ALL (SELECT fecha_matricula FROM asigunaturas A WHERE A.nia=E.nia);

CURSO 2005-06

21

S QL

SUBCONSULTAS

Subconsultas anidadas:
Una subconsulta anidada es una subconsulta embebida dentro de otra subconsulta. Ejemplo:
SELECT nombre, apellidos FROM estudiante E WHERE nia IN (SELECT nia FROM matricula WHERE codasig IN (SELECT codasig FROM asignaturas GROUP BY codasig HAVING COUNT(DISTINCT nia)>100));

Subconsultas vista en lnea:


Una subconsultas llamada vista en lnea, es una subconsulta embebida en la clusula FROM de una instruccin SELECT, como si de una tabla o vista se tratara. Ejemplos:
SELECT E.nia, nombre, apellidos, Num_asig Nmero asignaturas FROM estudiante E, (SELECT nia, count(*) Num_asig FROM matricula GROUP BY nia HAVING COUNT(*)>10) AUX WHERE E.nia=AUX.nia;
UPDATE facturas SET total=(SELECT importe FROM (SELECT Fac.codfac codigo, total_fac+total_fac*iva/100-total_fac*dto/100 Importe FROM facturas Fac, (SELECT F.codfac, SUM(L.subtotal) Total_Fac FROM facturas F, (SELECT codfac, (precio*cant)-(precio*cant*dto/100) Subtotal FROM lineas_fac) L WHERE F.codfac=L.codfac GROUP BY F.codfac) Fac_Tot WHERE Fac.codfac=Fac_Tot.codfac) AUX

WHERE Aux.codigo=facturas.codfac)

22

CURSO 2005-06

También podría gustarte