Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

子查詢是巢狀在 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?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×