本文是关于 Access SQL 的一系列文章之一。 本文介绍如何编写 FROM 子句,使用示例说明可在 FROM 子句中使用的各种技术。
在 SELECT 语句的 FROM 子句中指定数据源。 FROM 子句可能还包含 JOIN 操作。 使用 JOIN 操作匹配和合并两个数据源中的数据,例如两个表或一个表和一个查询。
有关 Access SQL 的概述,请参阅 Access SQL:基本概念、词汇和语法一文。
本文内容
指定数据源
SELECT 语句中的 FROM 子句指定包含 SELECT 子句将使用的数据的表或查询。
假设你想知道特定客户的电话号码。 假设包含存储此数据的字段的表称为 tblCustomer,FROM 子句将类似以下:
FROM tblCustomer
可以用方括号将该名称括起来。 如果名称不含任何空格或特殊字符(例如标点符号),则方括号为可选项。 如果名称含有空格或特殊字符,则必须使用方括号。
提示: 含空格的名称更易辨认,在设计窗体和报表时可为用户节省时间,而缺点在于编写 SQL 语句时需键入更多空格。 在 Access 数据库中为对象命名时应考虑这一点。
使用数据源的替换名称
可以使用不同名称在 SELECT 语句中引用表,方法是在 FROM 子句中使用表别名。 表别名是将表达式用作数据源时或为了使 SQL 语句易于键入和阅读,分配给查询中的数据源的名称。 如果数据源名称很长或难以键入,特别是当多个字段具有来自不同表的相同名称时,表别名非常有用。
例如,如果你希望选择两个字段中的数据,均为已命名 ID,其中一个来自表 tblCustomer,另一个来自表 table tblOrder,则 SELECT 子句可能类似以下:
SELECT [tblCustomer].[ID], [tblOrder].[ID]
通过在 FROM 子句中使用表别名,可简化查询输入。 包含表别名的 FROM 子句可能类似以下:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
可在 SELECT 子句中使用这些表别名,如下所示:
SELECT [C].[ID], [O].[ID]
注意: 使用表别名时,可以在 SQL 语句中引用表,方法是使用别名或使用表的完整名称。
联接相关数据
如果需要将两个数据源中的成对记录合并到查询结果的单个记录中,可执行联接操作。 联接是一种 SQL 操作,该操作指定两个数据源的关联方式,以及当另一个源中无对应数据时,是否应包含该源中的数据。
若要合并两个数据源中的信息,可对其共同的字段执行联接操作。 存储在此字段中的值匹配时,记录中的数据合并在结果中。
除了合并数据,还可使用联接操作指定,在相关表中没有对应记录的情况下是否包含该表中的记录。
例如,假设要使用查询中两个表(tblCustomer 和 tblOrder)的数据。 两个表均具有 CustomerID 字段,该字段用于标识客户。 tblCustomer 表中的每个记录可能在 tblOrder 表中具有一个或多个对应记录,对应值可由 CustomerID 字段中的值确定。
如果要联接表,使查询合并表中的记录(如果相关表中没有相应记录,则排除该表中的记录),FROM 子句可能类似以下(此处添加换行符以便阅读):
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
对于 Access,联接发生在 SELECT 语句的 FROM 子句中。 有两种类型的联接:内联和外联。 以下部分介绍这两种类型的联接。
内联
内联是最常见的联接类型。 包含内联的查询运行时,查询结果中的记录只是包含两个联接表中共同的值的记录。
内联具有以下语法(此处添加换行符以便阅读):
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
下表介绍内联操作的不同部分。
部分 |
说明 |
table1, table2 |
对其中的记录进行组合的表的名称。 |
field1, field2 |
要联接的字段的名称。 如果它们不是数值,则字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不必有相同的名称。 |
compopr |
任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或“<>”。 |
外联
外联类似于内联,因为其指定查询如何合并两个源中的信息。 不同之处在于外联还指定在不存在共同值的情况下,是否包含数据。 外联具有方向性:可指定是否包括联接中指定的第一个数据源中的所有记录(称为“左联接”),或者是否包括联接中第二个数据源中的所有记录(称为“右联接”)。
外联具有以下语法:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1compopr table2.field2下表介绍左联接和右联接操作的不同部分。
部分 |
说明 |
table1, table2 |
对其中的记录进行组合的表的名称。 |
field1, field2 |
要联接的字段的名称。 这些字段必须属于相同的数据类型,并且包含相同种类的数据,但它们不必具有相同的名称 |
compopr |
任何关系比较运算符:“=”、“<”、“>”、“<=”、“>=”或“<>”。 |
有关联接的详细信息,请参阅联接表和查询一文。