Sign in with Microsoft
Sign in or create an account.

子查詢是巢狀在 SELECT, SELECT... 內嵌的 SELECT 語句...INTO, INSERT...INTO、DELETE 或 UPDATE 語句,或在其他子查詢內。

語法

您可以使用三種形式的語法來建立子查詢:

比較 [ANY |所有|SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NOT]存在 (sqlstatement)

子查詢由下列各部分組成:

部分

描述

比較

比較運算式與子查詢結果的 運算式 運算子和比較運算子。

運算式

搜尋子查詢結果集的運算式。

sqlstatement

SELECT 語句,遵循與任何其他 SELECT 語句相同的格式和規則。 它必須以括弧括住。


註解

您可以在 SELECT 語句的欄位清單或 WHERE 或 HAVING 子句中,使用子查詢來取代運算式。 在子查詢中,您可以使用 SELECT 語句提供一組或多個特定值,以便在 WHERE 或 HAVING 子句運算式中進行評估。

使用 ANY 或 SOME 述詞作為同義字,在主要查詢中擷取符合子查詢中擷取之任何記錄的比較時,擷取記錄。 下列範例會傳回單價大於以 25% 或更高折扣價銷售之任何產品的所有產品:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

使用 ALL 述詞僅擷取主要查詢中的記錄,滿足子查詢中擷取之所有記錄的比較。 如果您在上一個範例中將 ANY 變更為 ALL,查詢只會傳回單價大於所有折價為 25% 或以上之產品的產品。 這會更加嚴格。

使用 IN 述詞,只擷取在子查詢中部分記錄包含等值之主查詢中的記錄。 下列範例會傳回折扣為 25% 或以上的所有產品:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

相反地,您可以使用 NOT IN 在主要查詢中只擷取那些記錄,而子查詢中沒有記錄包含等值。

使用 EXISTS 述詞 (搭配 true/false 比較選用的 NOT 保留字) ,以判斷子查詢是否傳回任何記錄。

您也可以在子查詢中使用資料表名稱別名來參照到子查詢外部 FROM 子句中所列的資料表。 下列範例會傳回薪資等於或大於擁有相同職稱之所有員工平均薪資的員工名稱。 [員工] 資料表會提供別名 「T1」:

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

在上述範例中,AS 保留字 為選用。

有些子查詢在交叉資料表查詢中是允許的,具體來說, (WHERE 子句) 中的述詞。 交叉資料表查詢中不允許以輸出 (SELECT 清單) 中的子查詢。



Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Office Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×