WHERE 子句 (Microsoft Access SQL)

适用于:Access 2013 | Access 2016

指定 FROM 子句所列出的表中的哪些记录会受 SELECTUPDATEDELETE 语句的影响。

语法

SELECT fieldlist FROM tableexpression WHERE criteria

包含 WHERE 子句的 SELECT 语句具有以下部分:

Part 说明
fieldlist 任何要检索的字段的名称,以及任何字段名别名、选择谓词(ALL、DISTINCT、DISTINCTROW 或 TOP)或其他 SELECT 语句选项。
tableexpression 从中检索数据的表的名称。
criteria 表达式,记录必须满足该表达式才能包括在查询结果中。

备注

Access 数据库引擎选择满足 WHERE 子句中列出的条件的记录。 如果未指定 WHERE 子句,查询将返回表中的所有行。 如果在查询中指定了多个表并且不包含 WHERE 子句或 JOIN 子句,查询将生成各个表的笛卡尔积。

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 子句最多能够包含由逻辑运算符(如 AndOr )联接的 40 个表达式。

输入包含空格或标点的字段名时,请使用方括号 ([ ]) 将名称括起来。 例如,客户信息表可能包含有关特定客户的信息:

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}}

请确保包含如上所示的嵌套大括号和连字符。

示例

下例假定 Employees 表中存在一个假定的 Salary 字段。 请注意,该字段实际并不存在于罗斯文数据库的 Employees 表中。

以下示例选择姓氏为 King 的每个记录的 LastName 和 FirstName 字段。 它调用 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。