適用於: Access 2013 | Access 2016

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

SELECT fieldlist FROM tableexpression WHERE criteria

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

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 
  • 存取開發人員論壇
  • 在 support.office.com 上存取說明
  • 存取 UtterAccess 上的論壇
  • 存取開發人員和 VBA 程式設計說明中心 (FMS)
  • 存取 StackOverflow 上的文章
  • 支援和意見反應

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