编辑 SQL 语句以改进查询结果
Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

如果查询不够努力,添加一些基本 SQL 语句有助于集中结果。 让我们看一下几种类型的 SQL 语句,以及可以编辑以获取所需结果的子句或部分。

注意:  本文不适用于 Access Web 应用 - 使用 Access 设计并联机发布的数据库。

本文内容

创建 Select 语句

SQL select 语句具有两到三个子句。 SELECT 子句告知数据库在何处查找数据,并要求它返回特定结果。

注意:  SELECT 语句始终以分号 ( 结尾;) 最后一个子句的末尾或 SQL 语句末尾的一行中。

以下 select 语句要求 Access 从“联系人”表中的“电子邮件地址”和“公司”列获取信息,具体来说,它是在“城市”列中找到“Seattle”的位置。

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

上述查询有三个子句 SELECT、FROM 和 WHERE。

1. SELECT 子句列出了包含要使用的数据的列,并具有一个运算符 (SELECT) 后跟两个标识符 (电子邮件地址和公司) 。 如果标识符具有空格或特殊字符 ((如“电子邮件地址”) ),请将标识符括在方括号内。

2. FROM 子句标识源表。 在此示例中,它具有一个运算符 (FROM) ,后跟一个标识符 (联系人) 。

3. WHERE 子句是可选的子句。 该示例具有一个运算符 (WHERE) ,后跟一个表达式 (City=“Seattle”) 。

有关选择查询的详细信息,请参阅 创建简单的选择查询。

下面是常见 SQL 子句的列表:

SQL 子句

功能

必需

SELECT

列出包含相关数据的字段。

FROM

列出包含 SELECT 子句中列出的字段的表。

WHERE

指定结果中包含的每个记录必须满足的字段条件。

ORDER BY

指定如何对结果进行排序。

GROUP BY

在包含聚合函数的 SQL 语句中,列出 SELECT 子句中未汇总的字段。

仅当存在此类字段时

HAVING

在包含聚合函数的 SQL 语句中,指定应用于 SELECT 语句中汇总的字段的条件。

每个 SQL 子句都由术语组成。 下面是一些常见 SQL 术语的列表。

SQL 术语

定义

示例

标识符

用于标识数据库对象的名称,如列名。

[电子邮件地址] 和公司

运算符

表示操作或修改操作的关键字。

AS

常量

一个不会更改的值,例如数字或 NULL。

42

表达式

计算结果为单个值的标识符、运算符、常量和函数的组合。

>= 产品。[单价]

返回页首

自定义 SELECT 子句

自定义

示例

仅查看非重复值。

在 SELECT 子句中使用 DISTINCT 关键字。

例如,如果客户来自多个不同的分支机构,并且有些公司具有相同的电话号码,并且你只想看到列出的电话号码一次,则 SELECT 子句将如下所示:

SELECT DISTINCT [txtCustomerPhone] 

更改标识符在数据表视图中的显示方式以提高可读性。

使用 AS 运算符 (A 关键字,该关键字代表一个操作或修改一个带有 SELECT 子句中的字段别名的操作) 。 字段别名是分配给字段的名称,使结果更易于阅读。

SELECT [txtCustPhone] AS [Customer Phone]

自定义 FROM 子句

自定义

示例

可以使用在 select 语句中分配给表的表别名或其他名称。 如果表名称很长,则表别名很有用,尤其是当您具有不同表中具有相同名称的多个字段时。

若要从两个字段中选择数据,两个字段都命名 ID,其中一个来自表 tblCustomer,另一个来自表 tblOrder:

SELECT [tblCustomer].[ID],        [tblOrder].[ID]

使用 AS 运算符在 FROM 子句中定义表别名:

FROM [tblCustomer] AS [C],      [tblOrder] AS [O] 

然后,可以在 SELECT 子句中使用这些表别名,如下所示:

SELECT [C].[ID],        [O].[ID]

使用联接可将来自两个数据源的记录对合并为单个结果,或者指定在相关表中没有相应记录时是否包括其中一个表中的记录。

联接表,以便查询合并表中的项,并在其他表中没有相应的记录时排除项

FROM 子句如下所示:

FROM [tblCustomer] INNER JOIN [tblOrder]ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID] 

关于使用联接

有两种类型的联接:内部联接和外部联接。 内部联接在查询中更为常见。 使用内部联接运行查询时,结果仅显示两个联接表中存在公共值的那些项。

外部联接指定是否包括不存在公共值的数据。 外部联接是方向性的,这意味着可以指定是包括联接中指定的第一个表中的所有记录, (称为左联接) ,还是包括联接中第二个表中的所有记录, (称为右联接) 。 外部联接具有以下 SQL 语法:

FROM table1 [ LEFT | RIGHT ] JOIN table2ON table1.field1 = table2.field2

有关在查询中使用联接的详细信息,请参阅 联接表和查询

返回页首

自定义 WHERE 子句

WHERE 子句包括有助于限制查询中返回的项数的条件。 请参阅 查询条件 及其工作原理的示例。

如何自定义基本 WHERE 子句的一个示例是限制查询的结果;假设你想要查找客户的电话号码,并且只能记住他的姓氏,即 Bagel。 在此示例中,姓氏存储在 LastName 字段中,因此 SQL 语法为:

WHERE [LastName]='Bagel'

还可以使用 WHERE 子句合并具有匹配数据但数据类型不同的列的数据源。 这很方便,因为无法在具有不同数据类型的字段之间创建联接。 使用一个字段作为另一个字段的条件,使用 LIKE 关键字。 例如,如果想要使用 Assets 表和 Employees 表中的数据,则仅当 Assets 表的资产类型字段中的资产类型在 Employees 表的“数量”字段中具有数字 3 时,WHERE 子句将如下所示:

WHERE field1 LIKE field2

重要:  不能在 WHERE 子句中指定与聚合函数一起使用的字段的条件。 可使用 HAVING 子句指定聚合字段的条件。

返回页首

使用 UNION 运算符进行自定义

如果想要查看来自多个类似选择查询的结果的组合视图,请使用 UNION 运算符。 例如,如果数据库具有“产品”表和“服务”表,并且它们都有三个字段:独占产品/服务或产品或服务、价格、保修或保证。 虽然“产品”表存储保修信息,而“服务”表存储保证信息,但基本信息是相同的。 可以使用联合查询合并两个表中的三个字段,如下所示:

SELECT name, price, warranty, exclusive_offerFROM ProductsUNION ALLSELECT name, price, guarantee, exclusive_offer FROM Services;

运行查询时,来自每组相应字段的数据将合并为一个输出字段。 若要在结果中包含任何重复行,请使用 ALL 运算符。

注意:  Select 语句必须具有相同数量的输出字段,顺序相同,并且数据类型相同或兼容。 对于联合查询,数字和文本数据类型是兼容的。

有关联合查询的详细信息,请参阅 使用联合查询查看多个查询的统一结果

返回页首

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。