使用別名的子查詢
若陳述式中的子查詢與外部查詢都參考到相同的資料表,這些陳述式將可敘述成自我聯結 (將資料表聯結至本身)。例如,您可以使用子查詢從特定狀態尋找員工的地址。
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 個資料列受到影響)
您也可以使用自我聯結:
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 和外部查詢中的參考,兩者代表的意義並不相同。