程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何在SQL Server中使用相關子查詢

如何在SQL Server中使用相關子查詢

編輯:關於SqlServer

子查詢是指將一條SQL Sever語句嵌入到另一條SQL Sever語句中。數據庫引擎將子查詢做為虛表執行查詢操作。子查詢可做為連接語句中的一個表,可做為選擇語句中的一個值,也可以是SQL Sever查詢子句,還可以是SQL Sever查詢子句的字句,與數據操作語句混合在一起。

子查詢的執行依賴於嵌套查詢。查詢樹從最裡層開始,一層一層向外執行。高層的嵌套查詢可以訪問低層嵌套查詢的結果。

什麼是相關子查詢?

與經典子查詢不同,相關子查詢依賴於外部查詢。外部查詢和子查詢是有聯系的,尤其在子查詢的WHERE語句中更是如此。相關子查詢的工作方式是:在子查詢中找到外部查詢的參考時執行外部查詢,此時將結果返回給子查詢。然後在外部查詢返回的結果集上執行子查詢操作。

相關子查詢的執行性能

由於相關子查詢中的子查詢在外部查詢返回的結果集上進行執行,其效率肯定下降。子查詢的性能完全依賴於查詢和有關的數據。但是,如果相關子查詢的語句寫得很有效率,則其執行性能能夠勝過那些使用幾個連接和臨時表的程序。

一個示例

相關子查詢的一個主要優點在於,它能完成傳統SQL Sever查詢不同解決的問題。例如,使用相關子查詢可以輕易完成這樣的任務:獲得連續的銷售總計結果或每一個州中出售最多的商品。

下面的例子說明了如何使用相關子查詢創建運行總計的過程。首先,運行下面的腳本創建一個例表:

CREATE TABLE SalesHistory
(SaleID INT IDENTITY(1,1),
Product VARCHAR(30),
   SaleDate SMALLDATETIME,
   SalePrice MONEY
)

現在,這個表保存了這些數據字段,讓我們運行腳本程序向其中添加一些記錄。Listing A中顯示了向表中輸入的300條記錄的程序,其中SalePrice有些變化。雖然SalePrice的變化不大,但是也足以說明相關子查詢如何工作。接下來,運行Listing B中的相關子查詢程序創建銷售報表。

在報表中引入的連續的銷售總計查詢即是相關子查詢。對於表中的每種產品,相關子查詢重述了其結果集,並且在將結果返回到結果集之前,為每一種售出產品的SalePrice進行加和操作。

試一試

試著運行一下上面的例子,並且玩玩這些代碼。對於我來說,可以從例子中學到很多新技術。如果已經精通了相關子查詢的原理,則可以考慮讓自己進入數據庫開發者的高層梯隊。

Tim Chapman是SQL Server數據庫管理員,現在為 Louisville,KY的一家銀行工作,他擁有7年的IT工作經驗。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved