Múltiples niveles de anidamiento
Una subconsulta puede incluir una o varias subconsultas. En una instrucción se puede anidar cualquier número de subconsultas.
La consulta siguiente busca los nombres de los empleados que también son vendedores.
Use AdventureWorks2008R2;
GO
SELECT LastName, FirstName
FROM Person.Person
WHERE BusinessEntityID IN
(SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE BusinessEntityID IN
(SELECT BusinessEntityID
FROM Sales.SalesPerson)
)
El conjunto de resultados es el siguiente.
LastName FirstName
-------------------------------------------------- -----------------------
Jiang Stephen
Abbas Syed
Alberts Amy
Ansman-Wolfe Pamela
Campbell David
Carson Jillian
Ito Shu
Mitchell Linda
Reiter Tsvi
Saraiva Jos
Vargas Garrett
Varkey Chudukatil Ranjit
Valdez Rachel
Tsoflias Lynn
Pak Jae
Blythe Michael
Mensa-Annan Tete
(17 row(s) affected)
La consulta más interna devuelve los Id. de los vendedores. La consulta del siguiente nivel superior se evalúa con estos Id. de vendedores y devuelve los números de Id. de contacto de los empleados. Finalmente, la consulta externa usa los Id. de contacto para buscar el nombre de los empleados.
También puede expresar esta consulta como una combinación:
USE AdventureWorks2008R2;
GO
SELECT LastName, FirstName
FROM Person.Person c
INNER JOIN HumanResources.Employee e
ON c.BusinessEntityID = e.BusinessEntityID
JOIN Sales.SalesPerson s
ON e.BusinessEntityID = s.BusinessEntityID