WHERE 子句 (Microsoft Access SQL)

適用於:Access 2013 | Access 2016

指定 FROM 子句列出的資料表中的哪些記錄會受到 SELECTUPDATEDELETE 陳述式影響。

語法

SELECT fieldlist FROM tableexpression WHERE criteria

包含 WHERE 子句的 SELECT 陳述式包含下列部分:

部分 描述
fieldlist 與任何欄位名稱別名、選取述詞 (ALL、DISTINCT、DISTINCTROW 或 TOP),或其他 SELECT 陳述式選項一起擷取的欄位名稱。
tableexpression 從中擷取資料的一或多個資料表的名稱。
criteria 記錄必須滿足才能包含在查詢結果中的運算式。

備註

Access 資料庫引擎會選取符合 WHERE 子句中所列條件的記錄。 如果您未指定 WHERE 子句,您的查詢會從資料表傳回所有資料列。 如果在查詢中指定一個以上的資料表,而且沒有包含 WHERE 子句或 JOIN 子句,查詢就會產生資料表的 Cartesian 產品。

WHERE 為選用,但如果包含,則會接在 FROM 的後面。 例如,您可以選取銷售部門中的所有員工 (WHERE Dept = 'Sales') 或年齡介於 18 到 30 之間的所有客戶 (),或年齡介於 18 到 30 之間的所有客戶 (WHERE Age Between 18 And 30)。

如果您未使用 JOIN 子句在多個資料表上執行 SQL 聯結作業,則產生的 Recordset 物件將無法更新。

WHERE 與 HAVING 類似。 WHERE 決定要選取哪些記錄。 同樣地,使用GROUP BY 群組記錄後,HAVING 即可決定要顯示哪些記錄。

使用 WHERE 子句來排除您不想依 GROUP BY 子句分組的記錄。

使用各種運算式,決定 SQL 陳述式要傳回哪些記錄。 例如,下列 SQL 陳述式會選取其薪資超過 $21,000 的所有員工:

SELECT LastName, Salary 
FROM Employees 
WHERE Salary > 21000;

WHERE 子句最多可包含 40 個運算式,由邏輯運算子加以連結,如 AndOr

當您輸入包含空格或標點符號的欄位名稱時,請使用方括號 ([ ]) 括住名稱。 例如,客戶資訊資料表可能包含有關特定客戶的資訊:

SELECT [Customer's Favorite Restaurant]

當您指定 criteria 引數時,日期常值必須是美式格式,即使您不是使用美國版的 Microsoft Jet 資料庫引擎也一樣。 例如,1996 年 5 月 10 日的英國格式為 10/5/96,而美國格式則是 5/10/96。 一定要使用數字符號 (#) 包住日期文字,如下列範例所示。

若要在英國資料庫中尋找日期為 1996 年 5 月 10 日的記錄,必須使用下列 SQL 陳述式:

SELECT * 
FROM Orders 
WHERE ShippedDate = #5/10/96#;

也可以使用 DateValue 函數,它可以找到 Microsoft Windows® 建立的國際設定。 例如,下列程式碼適用美國格式:

SELECT * 
FROM Orders 
WHERE ShippedDate = DateValue('5/10/96');

下列程式碼適合英國格式:

SELECT * 
FROM Orders 
WHERE ShippedDate = DateValue('10/5/96');

注意事項

[!注意事項] 如果準則字串中參照的欄屬於 GUID 類型,則準則運算式的語法稍有不同:

WHERE ReplicaID = {GUID {12345678-90AB-CDEF-1234-567890ABCDEF}}

一定要如上述語法包含大括號和連字號。

範例

下列範例假定 [員工] 資料表中的假設 [薪水] 欄位的存在。 請注意,這個欄位並不實際存在於 Northwind 資料庫的 Employees 資料表。

此範例選取姓氏為 King 的每筆記錄的 [姓氏] 和 [名字] 欄位。 此範例會呼叫 EnumFields 程序,您可以在 SELECT 陳述式範例中找到該程序。

Sub WhereX() 
 
    Dim dbs As Database, rst As Recordset 
 
    ' Modify this line to include the path to Northwind 
    ' on your computer. 
    Set dbs = OpenDatabase("Northwind.mdb") 
 
    ' Select records from the Employees table where the 
    ' last name is King. 
    Set rst = dbs.OpenRecordset("SELECT LastName, " _ 
        & "FirstName FROM Employees " _ 
        & "WHERE LastName = 'King';") 
     
    ' Populate the Recordset. 
    rst.MoveLast 
     
    ' Call EnumFields to print the contents of the 
    ' Recordset. 
    EnumFields rst, 12 
 
    dbs.Close 
 
End Sub 

另請參閱

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應