编辑 SQL 语句以改进查询结果

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

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

本文内容

创建 Select 语句

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

注意

SELECT 语句始终以分号 (;) 结尾,要么位于最后一个子句的末尾,要么位于 SQL 语句末尾的某行上。

以下 select 语句要求 Access 从“电子邮件地址”和“公司”列中的“联系人”表中获取信息,特别是在“城市”列中找到“西雅图”的位置。

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

上述查询包含三个子句:SELECT、FROM 和 WHERE。

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

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

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

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

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

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

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

SQL 术语 定义 示例
identifier 用于标识数据库对象的名称,如列名。 [电子邮件地址]和公司
运算符 表示操作或修改操作关键字 (keyword) 。 AS
常量 不变的值,如数字或 NULL。 42
表达式 标识符、运算符、常量和函数的组合,计算结果为单个值。 >= 产品。[单价]

返回页首

自定义 SELECT 子句

自定义 示例
仅查看非重复值。
在 SELECT 子句中使用 DISTINCT 关键字 (keyword) 。
例如,如果您的客户来自多个不同的分支机构,其中一些具有相同的电话号码,而您只希望看到一个电话号码列出一次,则您的 SELECT 子句将如下所示:SELECT DISTINCT [txtCustomerPhone]
更改标识符在数据表视图中的显示方式以提高可读性。
使用 AS 运算符 (表示操作的关键字 (keyword) ,或者在 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 table2
ON table1.field1 = table2.field2

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

返回页首

自定义 WHERE 子句

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

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

WHERE [LastName]='Bagel'

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

WHERE field1 LIKE field2

重要

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

返回页首

使用 UNION 运算符进行自定义

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

SELECT name, price, warranty, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee, exclusive_offer 
FROM Services;

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

注意

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

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

返回页首