Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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

Sintaxis

Puede usar tres formas de sintaxis para crear una subconsulta:

comparación [ANY | TODO | SOME] (instrucción sql)

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

[NO] EXISTS (instrucción SQL)

Una subconsulta consta de las siguientes partes:

Parte

Descripción

Comparación

Un expresión y un operador de comparación que compara la expresión con los resultados de la subconsulta.

expresión

Una expresión para la que se busca el conjunto de resultados de la subconsulta.

instrucción_sqls

Una instrucción SELECT, siguiendo el mismo formato y reglas que cualquier otra instrucción SELECT. Debe estar entre paréntesis.

Observaciones

Puede usar una subconsulta en lugar de una expresión en la lista de campos de una instrucción SELECT o en una cláusula WHERE o HAVING. En una subconsulta, use una instrucción SELECT para proporcionar un conjunto de uno o más valores específicos para evaluar en la expresión de cláusula WHERE o HAVING.

Use el predicado ANY o SOME, que son sinónimos, para recuperar los registros de la consulta principal que cumplen la comparación con los registros recuperados en la subconsulta. En el ejemplo siguiente se devuelven todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento del 25 por ciento o más:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Use el predicado ALL para recuperar solo los registros de la consulta principal que cumplen la comparación con todos los registros recuperados en la subconsulta. Si cambió ANY a ALL en el ejemplo anterior, la consulta devolverá solo los productos cuyo precio unitario sea mayor que el de todos los productos vendidos con un descuento del 25 por ciento o más. Esto es mucho más restrictivo.

Use el predicado IN para recuperar solo los registros de la consulta principal para los que algún registro de la subconsulta contiene un valor igual. En el ejemplo siguiente se devuelven todos los productos con un descuento del 25 por ciento o más:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Por el contrario, puede usar NOT IN para recuperar solo los registros de la consulta principal para los que ningún registro de la subconsulta contiene un valor igual.

Use el predicado EXISTS (con la palabra reservada NO opcional) en comparaciones de verdadero/falso para determinar si la subconsulta devuelve registros.

También puede usar alias de nombre de tabla en una subconsulta para hacer referencia a tablas enumeradas en una cláusula FROM fuera de la subconsulta. En el ejemplo siguiente 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. La tabla Empleados recibe el alias "T1":

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 palabra reservada AS es opcional.

Algunas subconsultas están permitidas en las consultas de tabla de referencias cruzadas, concretamente, como predicados (los de la cláusula WHERE). Las subconsultas como resultado (las de la lista SELECT) no están permitidas en las consultas de tabla de referencias cruzadas.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.