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. En el siguiente ejemplo, se devuelven 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 Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .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. En el siguiente ejemplo, se devuelven todos los productos con un descuento de un 25 por ciento o superior:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .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 expresiónalias (SQL) de nombres de tabla en una subconsulta para hacer referencia a tablas enumeradas en una cláusula FROM fuera de la subconsulta. En el siguiente ejemplo, se devuelven 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 Employees (Empleados):

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

En el ejemplo anterior, la expresiónalias (SQL)palabra reservada AS es opcional.

En las expresiónalias (SQL)palabra reservadaconsulta de tabla 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).



Se aplica a: Access 2007



¿Le ha sido útil esta información?

No

¿Cómo podemos mejorarlo?

255 caracteres restantes

Para proteger su privacidad, no incluya información de contacto en sus comentarios. Revisar política de privacidad.

¡Gracias por sus comentarios!

Recursos de soporte técnico

Cambiar idioma