本文聚焦巢狀子查詢(子查詢中再包含子查詢),相關子查詢留待後續探討。
資料分散四張表:Person.Contact、HumanResources.Employee、Sales.SalesOrderHeader、Sales.SalesOrderDetail、Production.Product。
Production.Product 以 ProductNumber LIKE 'FW%' 篩選平墊圈Sales.SalesOrderDetail 取得 SalesOrderIDSales.SalesOrderHeader 取得 SalesPersonIDHumanResources.Employee 取得 ContactIDPerson.Contact 取得姓名USE AdventureWorks;
GO
SELECT DISTINCT c.LastName, c.FirstName
FROM Person.Contact c
JOIN HumanResources.Employee e ON e.ContactID = c.ContactID
WHERE e.EmployeeID IN (
SELECT SalesPersonID
FROM Sales.SalesOrderHeader
WHERE SalesOrderID IN (
SELECT SalesOrderID
FROM Sales.SalesOrderDetail
WHERE ProductID IN (
SELECT ProductID
FROM Production.Product p
WHERE ProductNumber LIKE 'FW%'
)
)
);
GO
IN() 參數可直接接受 SELECT 陳述式,多層套用即形成巢狀結構JOIN 或 EXISTS 以利用查詢優化器的更佳執行計畫掌握「由內而外思考、由外而內撰寫」的巢狀子查詢思維,能將複雜多表查詢化繁為簡,是 T-SQL 進階必修課。