Sous-requêtes et alias
De nombreuses instructions où la sous-requête et la requête externe portent sur la même table peuvent également être formulées sous forme d'auto-jointures (jointure d'une table à elle-même). Vous pouvez par exemple trouver les salariés qui sont rattachés au même responsable que Terri Duffyen utilisant une sous-requête :
USE AdventureWorks;
GO
SELECT EmployeeID, ManagerID
FROM HumanResources.Employee
WHERE ManagerID IN
(SELECT ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = 12)
Voici l'ensemble des résultats.
EmployeeID ManagerID
----------- -----------
6 109
12 109
21 109
42 109
140 109
148 109
273 109
(7 row(s) affected)
Vous pouvez aussi utiliser une auto-jointure :
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
INNER JOIN HumanResources.Employee AS e2
ON e1.ManagerID = e2.ManagerID
AND e2.EmployeeID = 12
Les alias de table sont requis car la table, jointe à elle-même, apparaît dans deux rôles différents. Les alias peuvent aussi s'employer dans des requêtes imbriquées qui portent sur la même table, qu'il s'agisse d'une requête interne ou externe.
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
WHERE e1.ManagerID IN
(SELECT e2.ManagerID
FROM HumanResources.Employee AS e2
WHERE e2.EmployeeID = 12)
Grâce aux noms d'alias explicites, il apparaît clairement qu'une référence à la table HumanResources.Employee
dans la sous-requête est différente de la référence spécifiée dans la requête externe.