WHERE 子句 (Microsoft Access SQL)
适用于:Access 2013 | Access 2016
指定 FROM 子句所列出的表中的哪些记录会受 SELECT、UPDATE 或 DELETE 语句的影响。
语法
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 子句最多能够包含由逻辑运算符(如 And 和 Or )联接的 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
另请参阅
- 访问开发人员论坛
- 访问 support.office.com 上的帮助
- 访问 UtterAccess 上的论坛
- 访问开发人员和 VBA 编程帮助中心 (FMS)
- 访问 StackOverflow 上的帖子
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。