使用别名的子查询

许多其中的子查询和外部查询引用同一表的语句可称为自联接(将某个表与自身联接)。例如,您可以使用子查询查找特定州的员工的地址。

USE AdventureWorks2008R2;
GO
SELECT StateProvinceID, AddressID
FROM Person.Address
WHERE AddressID IN
    (SELECT AddressID
     FROM Person.Address
     WHERE StateProvinceID = 39)

下面是结果集:

StateProvinceID AddressID

----------- -----------

39 942

39 955

39 972

39 22660

(4 row(s) affected)

也可以使用自联接:

USE AdventureWorks2008R2;
GO
SELECT e1.StateProvinceID, e1.AddressID
FROM Person.Address AS e1
INNER JOIN Person.Address AS e2
ON e1.AddressID = e2.AddressID
AND e2.StateProvinceID = 39;

由于自联接的表会以两种不同的角色出现,因此必须有表别名。别名也可用于在内部查询和外部查询中引用同一表的嵌套查询。

USE AdventureWorks2008R2;
GO
SELECT e1.StateProvinceID, e1.AddressID
FROM Person.Address AS e1
WHERE e1.AddressID IN
    (SELECT e2.AddressID
     FROM Person.Address AS e2
     WHERE e2.StateProvinceID = 39)

显式别名清楚地表明,在子查询中对 Person.Address 的引用并不等同于在外部查询中的该引用。

请参阅

概念