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 (expresión: cualquier combinación de operadores matemáticos o lógicos, constantes, funciones y nombres de campos, controles y propiedades que evalúa a un solo valor. Las expresiones pueden realizar cálculos, manipular caracteres o probar datos.) 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 alias (alias (SQL): nombre alternativo para una tabla o campo en expresiones. Los alias se utilizan a menudo para acortar el nombre de una tabla o de un campo para referencias posteriores en el código, a fin de evitar posibles referencias ambiguas o para proporcionar un nombre más descriptivo en los resultados de una consulta.) 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 palabra reservada (palabra reservada: palabra que forma parte de un lenguaje, por ejemplo Visual Basic. Las palabras reservadas incluyen los nombres de instrucciones, funciones predefinidas y tipos de datos, métodos, operadores y objetos.) AS es opcional.

En las consultas de referencias cruzadas (consulta de tabla de referencias cruzadas: consulta que calcula una suma, promedio, recuento u otro tipo de total en registros y, a continuación, agrupa el resultado en dos tipos de información: uno vertical en el lado izquierdo de la hoja de datos y otro horizontal en la parte superior.) 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).

 
 
Corresponde a:
Access 2007