SQL SERVER 子查询的用法
子查詢是一個嵌套在 SELECT、INSERT、UPDATE 或 DELETE 語句或其他子查詢中的查詢。任何允許使用表達式的地方都可以使用子查詢。在此示例中,子查詢用作 SELECT 語句中名為 MaxUnitPrice 的列表達式。
other USE AdventureWorks2008R2; GO SELECT Ord.SalesOrderID, Ord.OrderDate,(SELECT MAX(OrdDet.UnitPrice)FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDetWHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice FROM AdventureWorks2008R2.Sales.SalesOrderHeader AS Ord子查詢也稱為內部查詢或內部選擇,而包含子查詢的語句也稱為外部查詢或外部選擇。
許多包含子查詢的 Transact-SQL 語句都可以改用聯接表示。其他問題只能通過子查詢提出。在 Transact-SQL 中,包含子查詢的語句和語義上等效的不包含子查詢的語句在性能上通常沒有差別。但是,在一些必須檢查存在性的情況中,使用聯接會產生更好的性能。否則,為確保消除重復值,必須為外部查詢的每個結果都處理嵌套查詢。所以在這些情況下,聯接方式會產生更好的效果。以下示例顯示了返回相同結果集的 SELECT 子查詢和 SELECT 聯接:
other /* SELECT statement built using a subquery. */ SELECT Name FROM AdventureWorks2008R2.Production.Product WHERE ListPrice =(SELECT ListPriceFROM AdventureWorks2008R2.Production.ProductWHERE Name = 'Chainring Bolts' );/* SELECT statement built using a join that returnsthe same result set. */ SELECT Prd1. Name FROM AdventureWorks2008R2.Production.Product AS Prd1JOIN AdventureWorks2008R2.Production.Product AS Prd2ON (Prd1.ListPrice = Prd2.ListPrice) WHERE Prd2. Name = 'Chainring Bolts';嵌套在外部 SELECT 語句中的子查詢包括以下組件:
-
包含常規選擇列表組件的常規 SELECT 查詢。
-
包含一個或多個表或視圖名稱的常規 FROM 子句。
-
可選的 WHERE 子句。
-
可選的 GROUP BY 子句。
-
可選的 HAVING 子句。
子查詢的 SELECT 查詢總是使用圓括號括起來。它不能包含 COMPUTE 或 FOR BROWSE 子句,如果同時指定了 TOP 子句,則只能包含 ORDER BY 子句。
子查詢可以嵌套在外部 SELECT、INSERT、UPDATE 或 DELETE 語句的 WHERE 或 HAVING 子句內,也可以嵌套在其他子查詢內。盡管根據可用內存和查詢中其他表達式的復雜程度的不同,嵌套限制也有所不同,但嵌套到 32 層是可能的。個別查詢可能不支持 32 層嵌套。任何可以使用表達式的地方都可以使用子查詢,只要它返回的是單個值。
如果某個表只出現在子查詢中,而沒有出現在外部查詢中,那么該表中的列就無法包含在輸出(外部查詢的選擇列表)中。
包含子查詢的語句通常采用以下格式中的一種:
-
WHERE expression [NOT] IN (subquery)
-
WHERE expression comparison_operator [ANY | ALL] (subquery)
-
WHERE [NOT] EXISTS (subquery)
總結
以上是生活随笔為你收集整理的SQL SERVER 子查询的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】WinCE中串口驱动及接口函数介
- 下一篇: 机房收费系统----可行性分析报告