Subconsultas SQL

Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT, SELECT...INTO, INSERT...INTO, DELETE o UPDATE o dentro de otra subconsulta.

Sintaxis

Puede utilizar tres formas diferentes de sintaxis para crear una subconsulta:

comparación [ANY | ALL | SOME] (instrucciónsql)

expresión [NOT] IN (instrucciónsql)

[NOT] EXISTS (instrucciónsql)

Una subconsulta consta de las siguientes partes:

Parte Descripción
comparación Una expresión y un operador de comparación que compara la expresión con los resultados de la subconsulta.
expresión Expresión para la cual se busca el conjunto de resultados de la subconsulta.
instrucciónsql Instrucción SELECT que sigue el mismo formato y las mismas reglas que cualquier otra instrucción SELECT. Debe estar entre paréntesis.
Comentarios

Puede utilizar una subconsulta en vez de una expresión en la lista de campos de una instrucción SELECT o de una cláusula WHERE o HAVING. En una subconsulta, utilice una instrucción SELECT a fin de proporcionar un conjunto de uno o más valores específicos para su evaluación en la expresión de la cláusula WHERE o HAVING.

Utilice los predicados ANY o SOME, que son sinónimos, para recuperar los registros de la consulta principal que satisfagan la comparación con algún registro recuperado en la subconsulta. El siguiente ejemplo devuelve todos los productos cuyo precio por unidad es mayor que el de algún producto vendido con un descuento de un 25 por ciento o superior:

SELECT * FROM Productos

WHERE PrecioUnidad > ANY

(SELECT PrecioUnidad FROM DetallesPedido

WHERE Descuento >= .25);

Utilice el predicado ALL para recuperar sólo aquellos registros de la tabla principal que satisfagan la comparación con todos los registros recuperados en la subconsulta. Si cambia ANY por ALL en el ejemplo anterior, la consulta devolvería sólo aquellos productos cuyo precio por unidad es mayor que el de todos los productos vendidos con un descuento de un 25 por ciento o superior. Éste es un grado de restricción mucho mayor.

Utilice el predicado IN para recuperar sólo aquellos registros de la consulta principal que tienen el mismo valor que algún registro de la subconsulta. El siguiente ejemplo devuelve todos los productos con un descuento de un 25 por ciento o superior:

SELECT * FROM Productos

WHERE IdProducto IN

(SELECT IdProducto FROM DetallesPedido

WHERE Descuento >= .25);

Por el contrario, puede utilizar NOT IN para recuperar sólo aquellos registros de la consulta principal que no tengan el mismo valor que ningún registro de la subconsulta.

Utilice el predicado EXISTS (con la palabra reservada opcional NOT) en comparaciones verdadero/falso para determinar si la subconsulta devuelve algún registro.

También puede utilizar alias de nombres de tabla en una subconsulta para hacer referencia a tablas enumeradas en una cláusula FROM fuera de la subconsulta. El siguiente ejemplo devuelve los nombres de los empleados cuyos salarios son iguales o superiores al salario promedio de todos los empleados que tienen el mismo puesto de trabajo. Se le ha dado el alias "T1" a la tabla Empleados:

SELECT Apellidos,

Nombre, Puesto, Salario

FROM Empleados AS T1

WHERE Salario >=

(SELECT Promedio(Salario)

FROM Empleados

WHERE T1.Puesto = Empleados.Puesto) Ordenar por puesto;

En el ejemplo anterior, la palabra reservada AS es opcional

En las consultas de referencias cruzadas se permiten algunas subconsultas, específicamente, como predicados (las de la cláusula WHERE). No obstante, en estas consultas de referencias cruzadas no se permiten las subconsultas como resultado (las de la lista SELECT).

Vea también
 
 
Corresponde a:
Access 2003