如果查询工作不够努力,添加一些基本 SQL 语句可以帮助集中结果。 让我们看看几种类型的 SQL 语句以及您可以编辑以获得所需结果的子句或部分。
本文内容
创建 Select 语句
SQL select 语句包含两到三个子句。 SELECT 子句告诉数据库在何处查找数据并要求它返回特定结果。
注意
SELECT 语句始终以分号 (;) 结尾,要么位于最后一个子句的末尾,要么位于 SQL 语句末尾的某行上。
以下 select 语句要求 Access 从“电子邮件地址”和“公司”列中的“联系人”表中获取信息,特别是在“城市”列中找到“西雅图”的位置。
上述查询包含三个子句: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 语句必须具有相同数量的输出字段、顺序相同,并且数据类型相同或兼容。 对于联合查询,“数字”和“文本”数据类型是兼容的。
有关联合查询的详细信息,请参阅使用 联合查询查看多个查询的统一结果。