許多情況下,查詢需要將數據與其他一些可能只能通過執行 GROUP BY 然后執行標準查詢才能收集的數據進行聯接。例如,如果要查詢最新五個定單的有關信息,您首先需要知道是哪些定單。這可以使用返回定單 ID 的 SQL 查詢來檢索。此數據就會存儲在臨時表(這是一個常用技術)中,然后與 PRoducts 表進行聯接,以返回這些定單售出的產品數量:
CREATE TABLE #Temp1 (OrderID INT NOT NULL, _ OrderDate DATETIME NOT NULL)INSERT INTO #Temp1 (OrderID, OrderDate)SELECT TOP 5 o.OrderID, o.OrderDateFROM Orders o ORDER BY o.OrderDate DESCSELECT p.ProductName, SUM(od.Quantity) AS ProductQuantityFROM #Temp1 t INNER JOIN [Order Details] od ON t.OrderID = od.OrderID INNER JOIN Products p ON od.ProductID = p.ProductID GROUP BY p.ProductNameORDER BY p.ProductNameDROP TABLE #Temp1
這些SQL語句會創建一個臨時表,將數據插入該表中,將其他數據與該表進行聯接,然后除去該臨時表。這會導致此查詢進行大量 I/O 操作,因此,可以重新編寫查詢,使用內嵌視圖取代臨時表。內嵌視圖只是一個可以聯接到 FROM 子句中的查詢。所以,您不用在 tempdb 中的臨時表上耗費大量 I/O 和磁盤訪問,而可以使用內嵌視圖得到同樣的結果:
SELECT p.ProductName, SUM(od.Quantity) AS ProductQuantityFROM (SELECT TOP 5 o.OrderID, o.OrderDate FROM Orders o ORDER BY o.OrderDate DESC ) t INNER JOIN [Order Details] od ON t.OrderID = od.OrderID INNER JOIN Products p ON od.ProductID = p.ProductID GROUP BY p.ProductNameORDER BY p.ProductName