天天看點

橋套子查詢

    有兩種子查詢類型:标準和相關。标準子查詢執行一次,結果回報給父查詢。相關子查詢每行執行一次,由父查詢找回。在本文中,我将重點讨論嵌套子查詢(nested subqueries)(我将在以後介紹相關子查詢)。

  試想這個問題:你想生成一個賣平墊圈的銷售人員清單。你需要的資料分散在四個表格中:人員.聯系方式(Person.Contact),人力資源.員工(HumanResources.Employee),銷售.銷售訂單标題(Sales.SalesOrderHeader),銷售.銷售訂單詳情(Sales.SalesOrderDetail)。在SQL Server中,你從内壓式(outside-in)寫程式,但從外壓式(inside-out)開始考慮非常有幫助,即可以一次解決需要的一個語句。

  如果從内到外寫起,可以檢查Sales.SalesOrderDetail表格,在LIKE語句中比對産品數(ProductNumber)值。你将這些行與Sales.SalesOrderHeader表格連接配接,從中可以獲得銷售人員IDs(SalesPersonIDs)。然後使用SalesPersonID連接配接SalesPersonID表格。最後,使用ContactID連接配接Person.Contact表格。

  USE AdventureWorks ;

  GO

  SELECT DISTINCT c.LastName, c.FirstName

  FROM Person.Contact c JOIN HumanResources.Employee e

  ON e.ContactID = c.ContactID WHERE 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%')));

  這個例子揭示了有關SQL Server的幾個絕妙事情。你可以發現,可以用IN()參數替代SELECT 語句。在本例中,有兩次應用,是以建立了一個嵌套子查詢。

  我是标準化(normalization)的發燒友,盡管我不接受其荒謬的長度。由于标準化具有各種查詢而增加了複雜性。在這些情況下子查詢就顯得非常有用,嵌套子查詢甚至更加有用。

  當你需要的問題分散于很多表格中時,你必須再次将它們拼在一起,這時你可能發現嵌套子程式就很有用。

上一篇: 使用
下一篇: 結構索引