SQL 子查詢

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

子查詢是 SELECT、SELECT...INTO、INSERT...INTO、DELETE、UPDATE 陳述式或其他子查詢內的巢狀 SELECT 陳述式。

語法

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

comparison [ANY | ALL | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

子查詢由下列參數組成:

子句各部分

描述

comparison

將運算式與子查詢結果比較的運算式及比較運算子

expression

要在子查詢結果集中被搜尋的運算式

sqlstatement

SELECT 陳述式,其格式及規則與任何其他的 SELECT 陳述式相同。必須以括弧括住此陳述式


備註

您可以使用子查詢,而非 SELECT 陳述式欄位清單中的運算式,或 WHERE 或 HAVING 子句中的運算式。在子查詢中,可以使用 SELECT 陳述式,提供在 WHERE 或 HAVING 子句運算式中進行估算的一個或一組特定值。

使用 ANY 或 SOME 述詞 (這兩者為同義字),可以在主查詢中,擷取滿足與任何子查詢擷取記錄比較的記錄。下列範例傳回所有單價高於以七五折或更低折扣售出之任何產品的產品:

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

使用 ALL 述詞只擷取主查詢中,滿足與所有子查詢擷取記錄比較的記錄。若在先前的範例中,將 ANY 變更為 ALL,則查詢只會傳回單價高於以七五折或更低折扣售出之所有產品的產品。如此一來限制更多。

使用 IN 述詞只擷取主查詢中,其值與某些子查詢記錄所含值相等的記錄。下列範例傳回所有以七五折或更低折扣售出的產品:

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

相對地,您可以使用 NOT IN 只擷取主查詢中,其值與所有子查詢記錄值都不相等的記錄。

在 true/false 比較中使用 EXISTS 述詞 (搭配選用的 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 子句中)。交叉資料表查詢中不允許子查詢做為輸出 (選取清單中)。



附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×