使用别名的子查询
许多其中的子查询和外部查询引用同一表的语句可称为自联接(将某个表与自身联接)。例如,您可以使用子查询查找特定州的员工的地址。
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 的引用并不等同于在外部查询中的该引用。