Access SQL:基本概念、词汇和语法

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

当你想要从数据库中检索数据时,可以使用结构化查询语言或 SQL 请求数据。 SQL 是一种计算机语言,它与英语非常相似,但数据库程序可以理解。 运行的每个查询都在后台使用 SQL。

了解 SQL 的工作原理有助于创建更好的查询,还能让你更容易理解如何修复未返回所需结果的查询。

本文是关于 Access SQL 的一系列文章之一。 本文介绍 SQL 选择数据的基本用法,并使用示例来说明 SQL 语法。

本文内容

什么是 SQL?

SQL 是一种用于处理事实集及其之间关系的计算机语言。 关系数据库程序(如 Microsoft Office Access)使用 SQL 来处理数据。 与许多计算机语言不同,即使对于新手来说,SQL 也不难阅读和理解。 与许多计算机语言一样,SQL 是 ISOANSI 等标准机构认可的国际标准。

可以使用 SQL 来描述可帮助您回答问题的数据集。 使用 SQL 时,必须使用正确的语法。 语法是正确组合语言元素的一组规则。 SQL 语法基于英语语法,并使用许多与 VBA) 语法相同的元素Visual Basic for Applications (。

例如,检索名字是 Mary 的联系人的姓氏列表的简单 SQL 语句可能类似于以下内容:

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

注意

SQL 不仅用于操作数据,还用于创建和更改数据库对象(例如表)的设计。 SQL 中用于创建和更改数据库对象的部分称为数据定义语言 (DDL) 。 本主题不介绍 DDL。 有关详细信息,请参阅使用 数据定义查询创建或修改表或索引一文。

SELECT 语句

若要使用 SQL 描述一组数据,请编写 SELECT 语句。 SELECT 语句包含对要从数据库中获取的一组数据的完整说明。 包括以下情况:

  • 哪些表包含数据。
  • 来自不同源的数据之间的关系。
  • 哪些字段或计算将生成数据。
  • 数据必须匹配才能包含的条件。
  • 是否以及如何对结果进行排序。

SQL 子句

与句子一样,SQL 语句也有子句。 每个子句执行 SQL 语句的功能。 SELECT 语句中需要某些子句。 下表列出了最常见的 SQL 子句。

SQL 子句 作用 必选
SELECT 列出包含感兴趣数据的字段。
FROM 列出包含 SELECT 子句中所列字段的表。
WHERE 指定要包含在结果中的每条记录必须满足的字段条件。
排序依据 指定如何对结果进行排序。
GROUP BY 在包含聚合函数的 SQL 语句中,列出 SELECT 子句中未汇总的字段。 仅当有此类字段时
HAVING 在包含聚合函数的 SQL 语句中,指定应用于 SELECT 语句中汇总的字段的条件。

SQL 术语

每个 SQL 子句都由词组成 - 可与词性相当。 下表列出了 SQL 术语的类型。

SQL 术语 可比较词性 定义 示例
identifier 名词 用于标识数据库对象的名称,例如字段的名称。 Customers.[电话号码]
运算符 动词或副词 表示操作或修改操作关键字 (keyword) 。 AS
常量 名词 不变的值,如数字或 NULL。 42
表达式 形容词 标识符、运算符、常量和函数的组合,计算结果为单个值。 >= 产品。[单价]

返回页首

基本 SQL 子句:SELECT、FROM 和 WHERE

SQL 语句采用一般形式:

SELECT field_1
FROM table_1
WHERE criterion_1
;

注意

  • Access 忽略 SQL 语句中的换行符。 但是,请考虑为每个子句使用一行,以帮助提高您自己和其他人的 SQL 语句的可读性。
  • 每个 SELECT 语句都以分号 (;) 结尾。 分号可以出现在最后一个子句的末尾,也可以单独出现在 SQL 语句末尾的行上。

Access 中的一个示例

下面演示了简单选择查询的 SQL 语句在 Access 中的样子:

显示 SELECT 语句的 SQL 对象选项卡

1. SELECT 子句

2. FROM 子句

3. WHERE 子句

此示例 SQL 语句内容为“从名为”联系人“的表中选择存储在名为”电子邮件地址“和”公司“字段中的数据,特别是字段”城市“字段的值为”西雅图“的记录。

让我们一次查看一个子句的示例,以了解 SQL 语法的工作原理。

SELECT 子句

SELECT [E-mail Address], Company

这是 SELECT 子句。 它由一个运算符组成 (SELECT) 后跟两个标识符 ([电子邮件地址] 和公司) 。

如果标识符包含空格或特殊字符 (如“电子邮件地址”) ,则必须将其括在方括号中。

SELECT 子句不必说明哪些表包含字段,并且不能指定要包括的数据必须满足的任何条件。

在 SELECT 语句中,SELECT 子句始终出现在 FROM 子句前面。

FROM 子句

FROM Contacts

这是 FROM 子句。 它由运算符组成 (FROM) 后跟标识符 (联系人) 。

FROM 子句不列出要选择的字段。

WHERE 子句

WHERE City="Seattle"

这是 WHERE 子句。 它包含运算符 (WHERE) ,后跟表达式 (City=“Seattle”) 。

注意

与 SELECT 和 FROM 子句不同,WHERE 子句不是 SELECT 语句的必需元素。

您可以使用 SELECT、FROM 和 WHERE 子句来完成 SQL 支持执行的许多操作。 有关如何使用这些子句的详细信息,请参阅以下附加文章:

返回页首

对结果进行排序: 排序依据

与 Microsoft Excel 一样,Access 允许对数据表中的查询结果进行排序。 您还可以使用 ORDER BY 子句,在查询中指定运行查询时希望如何对结果进行排序。 如果使用 ORDER BY 子句,则它是 SQL 语句中的最后一个子句。

ORDER BY 子句包含要用于排序的字段列表,顺序与要应用排序操作的顺序相同。

例如,假定您希望结果首先按“公司”字段的值降序排序,如果存在“公司”字段中的值,则按照“电子邮件地址”字段中的值升序排序。 你的 ORDER BY 子句类似于以下内容:

ORDER BY Company DESC, [E-mail Address]

注意

默认情况下,Access 按升序 (A-Z、从小到大) 对值进行排序。 请改用 DESC 关键字 (keyword) 按降序对值进行排序。

有关 ORDER BY 子句的更多信息,请参阅主题 ORDER BY 子句

返回页首

使用汇总数据:GROUP BY 和 HAVING

有时需要使用汇总数据,例如一个月的总销售额或库存中最昂贵的项目。 为此,请将聚合函数应用于 SELECT 子句中的字段。 例如,如果你希望查询显示为每家公司列出的电子邮件地址计数,则 SELECT 子句可能类似于以下内容:

SELECT COUNT([E-mail Address]), Company

可使用的聚合函数取决于要使用的字段或表达式中的数据类型。 有关可用聚合函数的详细信息,请参阅 SQL 聚合函数一文。

指定聚合函数中未使用的字段:GROUP BY 子句

使用聚合函数时,通常还必须创建 GROUP BY 子句。 GROUP BY 子句列出了您不对其应用聚合函数的所有字段。 如果将聚合函数应用于查询中的所有字段,则无需创建 GROUP BY 子句。

GROUP BY 子句紧跟在 WHERE 子句之后,如果没有 WHERE 子句,则跟在 FROM 子句之后。 GROUP BY 子句会列出 SELECT 子句中出现的字段。

例如,继续前面的示例,如果 SELECT 子句将聚合函数应用于 [E-mail Address],而不应用于 Company,则 GROUP BY 子句将类似于以下内容:

GROUP BY Company

有关 GROUP BY 子句的更多信息,请参阅主题 GROUP BY 子句

使用组条件限制聚合值:HAVING 子句

如果要使用条件来限制结果,但要应用条件的字段用于聚合函数,则不能使用 WHERE 子句。 相反,可以使用 HAVING 子句。 HAVING 子句的工作方式类似于 WHERE 子句,但用于聚合数据。

例如,假设您使用 AVG 函数 (,该函数计算 SELECT 子句中第一个字段) 的平均值:

SELECT COUNT([E-mail Address]), Company

如果希望查询根据该 COUNT 函数的值限制结果,则不能在 WHERE 子句中为该字段使用条件。 相反,应将条件放在 HAVING 子句中。 例如,如果仅希望查询在有多个电子邮件地址与公司关联的情况下返回行,则 HAVING 子句可能类似于以下内容:

HAVING COUNT([E-mail Address])>1

注意

查询可以包含 WHERE 子句和 HAVING 子句 — 聚合函数中未使用的字段的条件位于 WHERE 子句中,与聚合函数一起使用的字段的条件位于 HAVING 子句中。

有关 HAVING 子句的更多信息,请参阅主题 HAVING 子句

返回页首

合并查询结果:UNION

如果要将多个类似的选择查询返回的所有数据作为组合集一起审阅,请使用 UNION 运算符。

UNION 运算符允许将两个 SELECT 语句合并为一个。 组合的 SELECT 语句必须具有相同数量的输出字段、顺序一致,并且数据类型相同或兼容。 运行查询时,来自每组对应字段的数据将合并到一个输出字段中,以便查询输出具有与每个 select 语句相同的字段数。

注意

对于联合查询,“数字”和“文本”数据类型是兼容的。

使用 UNION 运算符时,还可以使用 ALL 关键字指定查询结果是否应包含重复行(如果存在)。

合并了两个 SELECT 语句的联合查询的基本 SQL 语法如下:

SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;

例如,假设您有一个名为“产品”的表和另一个名为“服务”的表。 这两个表都有字段,其中包含产品或服务的名称、价格、保修或保证可用性,以及您是否专门提供产品或服务。 虽然“产品”表存储保修信息,服务表存储保修信息,但 (特定产品或服务是否包含质量) 承诺,基本信息是相同的。 您可以使用联合查询(如下所示)合并两个表中的四个字段:

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;

有关如何使用 UNION 运算符合并 SELECT 语句的详细信息,请参阅 使用联合查询合并多个选择查询的结果

返回页首