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

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

如果查询不够努力,添加一些基本的 SQL 语句可帮助你专注于结果。 让我们看一下几种类型的 SQL 语句,以及可以编辑以获得想要的结果的子句或部分。

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

本文内容

创建 Select 语句

select 语句SQL两到三个子句。 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

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

ORDER BY

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

GROUP BY

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

仅在存在此类字段时

HAVING

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

每个SQL子句由术语决定。 下面是一些常见术语SQL列表。

SQL术语

定义

示例

标识符

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

[电子邮件地址] 和公司

运算符

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

AS

常量

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

42

表达式

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

>= 产品。[单价]

返回页首

自定义 SELECT 子句

自定义

示例

仅查看非重复值。

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

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

SELECT DISTINCT [txtCustomerPhone] 

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

使用 AS 运算符 (用于表示操作或修改操作) 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 关键字。 例如,如果要使用"资产"表和"员工"表中的数据,则只有当"资产"表的资产类型字段中的资产类型在"员工"表的"数量"字段中具有数字 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 语句必须具有相同的输出字段数、相同顺序以及相同或兼容的数据类型。 对于联合查询,数字和文本数据类型是兼容的。

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

返回页首

需要更多帮助?

扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×