如果查询不够努力,添加一些基本 SQL 语句有助于集中结果。 让我们看一下几种类型的 SQL 语句,以及可以编辑以获取所需结果的子句或部分。
注意: 本文不适用于 Access Web 应用 - 使用 Access 设计并联机发布的数据库。
本文内容
创建 Select 语句
SQL select 语句具有两到三个子句。 SELECT 子句告知数据库在何处查找数据,并要求它返回特定结果。
注意: SELECT 语句始终以分号 ( 结尾;) 最后一个子句的末尾或 SQL 语句末尾的一行中。
以下 select 语句要求 Access 从“联系人”表中的“电子邮件地址”和“公司”列获取信息,具体来说,它是在“城市”列中找到“Seattle”的位置。
上述查询有三个子句 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 子句将如下所示:
|
更改标识符在数据表视图中的显示方式以提高可读性。 使用 AS 运算符 (A 关键字,该关键字代表一个操作或修改一个带有 SELECT 子句中的字段别名的操作) 。 字段别名是分配给字段的名称,使结果更易于阅读。 |
|
自定义 FROM 子句
自定义 |
示例 |
可以使用在 select 语句中分配给表的表别名或其他名称。 如果表名称很长,则表别名很有用,尤其是当您具有不同表中具有相同名称的多个字段时。 |
若要从两个字段中选择数据,两个字段都命名 ID,其中一个来自表 tblCustomer,另一个来自表 tblOrder:
使用 AS 运算符在 FROM 子句中定义表别名:
然后,可以在 SELECT 子句中使用这些表别名,如下所示:
|
使用联接可将来自两个数据源的记录对合并为单个结果,或者指定在相关表中没有相应记录时是否包括其中一个表中的记录。 联接表,以便查询合并表中的项,并在其他表中没有相应的记录时排除项 |
FROM 子句如下所示:
|
关于使用联接
有两种类型的联接:内部联接和外部联接。 内部联接在查询中更为常见。 使用内部联接运行查询时,结果仅显示两个联接表中存在公共值的那些项。
外部联接指定是否包括不存在公共值的数据。 外部联接是方向性的,这意味着可以指定是包括联接中指定的第一个表中的所有记录, (称为左联接) ,还是包括联接中第二个表中的所有记录, (称为右联接) 。 外部联接具有以下 SQL 语法:
FROM table1 [ LEFT | RIGHT ] JOIN table2
ON 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_offer
FROM Products UNION ALL SELECT name, price, guarantee, exclusive_offer FROM Services;
运行查询时,来自每组相应字段的数据将合并为一个输出字段。 若要在结果中包含任何重复行,请使用 ALL 运算符。
注意: Select 语句必须具有相同数量的输出字段,顺序相同,并且数据类型相同或兼容。 对于联合查询,数字和文本数据类型是兼容的。
有关联合查询的详细信息,请参阅 使用联合查询查看多个查询的统一结果。