• 沒有找到結果。

第 4 章 创建和使用查询

N/A
N/A
Protected

Academic year: 2021

Share "第 4 章 创建和使用查询"

Copied!
35
0
0

加載中.... (立即查看全文)

全文

(1)

第 4 章 创建和使用查询

在数据库操作中,很大一部分工作是对数据进行统计、计算与检索。虽然可以在数据表 中进行筛选、排序、浏览等操作,但是数据表在执行数据计算以及检索多个表时就显得无能为 力了。此时可以利用查询轻而易举地完成以上操作。

查询是 Access 数据库中的一个重要对象。查询实际上就是收集一个或几个表中用户认 为有用的字段的工具。可以将查询到的数据组成一个集合,这个集合中的字段可能来自一个 表,也可能来自多个不同的表,这个集合就称为查询。在 Access 中查询可以用来生成窗体、

报表,甚至是生成其他查询的基础。因此,查询的目的就是让用户根据指定条件对表或者其 他查询进行检索,筛选出符合条件的记录,构成一个新的数据集合,从而方便用户对数据库 进行查看和分析。本章将介绍 Access 查询对象的基本概念、操作方法和应用方式,并讲解 SQL 的基本知识。

4.1 查询简介

查询是关系数据库中的一个重要概念,查询对象不是数据的集合,而是操作的集合。可 以理解为查询是针对数据表中数据源的操作命令。在 Access 数据库中,查询是一种统计和分 析数据的工作,是对数据库中的数据进行分类、筛选、添加、删除和修改。从表面现象上看查 询似乎是建立了一个新表,但是,查询的记录集实际上并不存在。每次运行查询时,Access 便从查询源表的数据中创建一个新的记录集,使查询中的数据能够和源表中的数据保持同步。

每次打开查询就相当于重新按条件进行查询。查询可以作为结果,也可以作为来源,即查询可 以根据条件从数据表中检索数据并将结果存储起来;查询也可以作为创建表、查询、窗体或报 表的数据源。

根据其应用目的不同,可以将 Access 的查询分为以下 5 种类型:

(1)选择查询。选择查询是最常用的一种查询类型。它是根据指定的查询条件从一个或 多个表中获取数据并显示结果。也可以使用选择查询对记录进行分组,并对记录进行总计、计 数、平均以及其他种类的计算。

(2)计算查询。计算查询是通过查询操作完成基表内部或各基表之间数据的计算。

(3)参数查询。当用户需要的查询每次都要改变查询准则,而且每次都重新创建查询又 比较麻烦时,就可以利用参数查询来解决这个问题。参数查询是通过对话框提示用户输入查询 准则,系统将以该准则作为查询条件,将查询结果按指定的形式显示出来。

(4)操作查询。操作查询是在一次查询操作中对得到的结果进行编辑等操作。操作查询 分为 4 种类型:删除、追加、更改与生成表。

(5)SQL 查询。这种查询需要一些特定的 SQL 命令,这些命令必须写在 SQL 视图中

(SQL 查询不能使用设计视图)。

在 Access 中,查询的实现可以通过两种方式进行,一种是在数据库中建立查询对象,另 一种是在 VBA 程序代码中使用结构化查询语言 SQL(Structured Query Language)。

(2)

4.2 查询视图

4.2.1 数据表视图

数据表视图主要用于在行和列格式下显示表、查询以及窗体中的数据,如图 4.1 所示是“所 有男同学”查询的数据表视图。对于选择查询,在“数据库”窗口的“对象”列表下选中“查 询”,双击要打开的查询便可以以数据表视图方式打开查询。用户可以通过这种方式进行打开 查询、查看信息、更改数据、追加记录和删除记录等操作。

图 4.1 查询的数据表视图

4.2.2 设计视图

设计视图是一个设计查询的窗口,包含了创建查询所需要的各个组件。用户只需要在各个组 件中设置一定的内容就可以创建一个查询。查询设计窗口分为上下两部分,上部为表/查询的字段 列表,显示添加到查询中的数据表或查询的字段列表;下部为查询设计区,定义查询的字段,并 将表达式作为条件来限制查询的结果;中间是可以调节的分隔线;标题栏包括查询名称和查询类 型,如图 4.2 所示。用户只需要在各个组件中设置一定的内容就可以创建一个查询。

图 4.2 查询设计窗口

在查询设计网格中,可以详细设置查询的内容,具体内容的功能如下:

(1)字段:查询所需要的字段。每个查询至少包括一个字段,也可以包含多个字段。如 果与字段对应的“显示”复选框被选中,则表示该字段将显示在查询的结果中。

(2)表:指定查询的数据来源表或其他查询。

(3)排序:指定查询的结果是否进行排序。排序方式包括“升序”、“降序”和“不排序”

三种。

字段列表

设计网格 分隔线

(3)

(4)准则:指定用户用于查询的条件或要求。

查询设计窗口的工具栏中还包含许多按钮,可以帮助用户方便、快捷地进行查询,如表 4.1 所示。

表 4.1 “查询设计”工具栏

按钮 作用

视图 单击此按钮可以打开一个菜单列表,用于切换不同的视图

保存 保存查询的最新更改

打印 打印查询结果

文件搜索 打开“基本文件搜索”任务窗口

查询类型 单击此按钮可以打开一个菜单列表,用于选择需要的查询类型

运行 执行一个查询动作

显示表 打开“显示表”对话框,用于在查询中添加更多的查询或表

总计 显示总计行

上限值 可以选择是否返回指定记录数、记录百分数或所有值

属性 打开属性窗口

生成器 打开“表达式生成器”对话框

数据库窗口 打开数据库窗口

新对象 单击此按钮可以打开一个菜单列表,用于选择新建对象

帮助 单击此按钮可以打开“Microsoft Access 帮助”窗口 4.2.3 SQL 视图

用户可以使用设计视图创建和查看查询,但并不能与查询进行直接交互。Access 能将设 计视图中的查询翻译成 SQL 语句。SQL 是 Structured Query Language(结构化查询语言)的缩 写。虽然 SQL 语言是大型的、多样的语言,但用户只需要简单了解 SQL 就能够使用它。当用 户在设计视图中创建查询时,Access 在 SQL 视图中自动创建与查询对应的 SQL 语句。用户可 以在 SQL 视图中查看或改变 SQL 语句,进而改变查询。

打开查询的数据表视图,选择“视图”菜单的“SQL 视图”命令,打开 SQL 视图,如图 4.3 所示。

图 4.3 查询的 SQL 视图

(4)

4.3 使用查询向导创建查询

可以使用查询向导创建查询,常用的查询向导有:

简单查询向导。

交叉表查询向导。

查找重复项查询向导。

查找不匹配项查询向导。

4.3.1 简单查询向导

在 Access 中可以利用简单查询向导创建查询,可以在一个或多个表(或其他查询)指定 的字段中检索数据,而且通过向导可以对记录组或全部记录进行总计、计数以及求平均值的运 算,还可以计算字段中的最大值和最小值。

使用简单查询向导创建查询的操作步骤如下:

(1)在“数据库”窗口中,单击“对象”下的“查询”选项。

(2)在该窗口的工具栏中单击“新建”按钮,打开“新建查询”对话框,如图 4.4 所示。

图 4.4 “新建查询”对话框

(3)在“新建查询”对话框中单击“简单查询向导”选项,然后单击“确定”按钮,打 开“简单查询向导”对话框,如图 4.5 所示。

图 4.5 “简单查询向导”对话框

(4)选择查询中要使用的字段。在“表/查询”列表框中选择要作为查询数据来源的表或

(5)

查询名,在“可用字段”列表框中双击要用的字段名,双击后字段将会添加到“选定的字段”

列表框中,或者可以单击“可用字段”列表框中的字段名,然后单击 按钮。如果发现“选 定的字段”列表框中的字段选错了,可以在“选定的字段”列表框中双击要删除的字段名,将 它移回到“可用字段”列表框中,或者可以单击“选定的字段”列表框中的字段名,然后单击 按钮。如果要全部选定“可用字段”列表框中的字段,则单击 按钮。如果要全部去掉

“选定的字段”列表框中的字段,则可以单击 按钮。在这里单击“表/查询”列表框中的下 三角按钮,在出现的列表中选择“表:学生档案表”,再从“可用字段”列表框中选择“学号”、

“姓名”、“性别”字段,如图 4.6 所示。

图 4.6 确定查询中使用哪些字段

(5)单击“下一步”按钮,打开简单查询向导的“完成”对话框。在该对话框中指定查 询的标题,输入查询名,还可以选择完成向导后要做的工作,有“打开查询查看信息”和“修 改查询设计”两个选项供选择,如图 4.7 所示。

图 4.7 简单查询向导的“完成”对话框

(6)单击“完成”按钮,完成该查询的创建过程。

注意:如果生成的查询不完全符合要求,可以重新执行简单查询向导或在设计视图中更 改查询。

(6)

4.3.2 交叉表查询向导

使用向导创建交叉表查询可以将数据组合成表,并利用累计工具将数值显示为电子报表 式的格式。交叉表查询可以将数据分为两组显示,一组显示在左边,一组显示在上面,左边和 上面的数据在表中的交叉点可以进行求和、求平均值、计数或其他计算。

下面以统计各院系男、女生人数为例介绍使用交叉表查询向导创建查询的操作步骤:

(1)在“数据库”窗口的“对象”列表在选中“查询”,单击“数据库”窗口工具栏上 的“新建”按钮,打开“新建查询”对话框。

(2)选择“交叉表查询向导”选项,单击“确定”按钮,打开如图 4.8 所示的“交叉表 查询向导”对话框。

图 4.8 “交叉表查询向导”对话框 1

(3)在“视图”选项组中选择用于交叉表查询的表或查询,这里选择“表”。在“请指 定哪个表或查询中含有交叉表查询结果所需的字段”列表框中,选择需要使用的表或查询,在 这里选择“学生档案表”。

(4)单击“下一步”按钮,在“可用字段”列表框中选择“院系”作为交叉表中要用的 行标题,如图 4.9 所示。

(5)单击“下一步”按钮,在这个对话框中选择“性别”作为列标题,如图 4.10 所示。

图 4.9 “交叉表查询向导”对话框 2 图 4.10 “交叉表查询向导”对话框 3

(7)

(6)单击“下一步”按钮,确定为每个列和行的交叉点计算出什么数字。在“字段”列 表框中选择“学号”,在“函数”列表框中选择“计数”,如图 4.11 所示。在“函数”列表框 中列出了 9 种 Access 可以提供计算的函数,用户只要从中选择 Access 就可以自动建立按选择 的函数计算交叉点的数据。同时要注意是否对各行进行小计,通过选中或取消选中“是,包括 各行小计”复选框来实现。

(7)单击“下一步”按钮,在出现的对话框中输入交叉表的名称“学生档案表_交叉表”,

如图 4.12 所示。

图 4.11 “交叉表查询向导”对话框 4 图 4.12 为查询指定标题

(8)单击“完成”按钮,最后得到的交叉表查询结果如图 4.13 所示。

图 4.13 交叉表查询结果

从这个交叉表中可以看出交叉表主要分为三部分:行标题、列标题和交叉点。其中行标 题是在交叉表左边出现的字段(最多允许选择三个字段),列标题是在交叉表上面出现的字段

(只允许选择一个字段),交叉点则是行和列标题交叉的数据点。

注意:在数据库中,可以通过在窗体中使用“数据透视表向导”或在数据访问页中创建 数据透视表列表来显示交叉表数据,而无须创建单独的查询。使用数据透视表窗体或数据透视 表列表可以按照不同的方法来分析数据、更改所需的行标题和列标题。

4.3.3 查找重复项查询向导

根据“查找重复项”查询的结果,可以确定在表中是否有重复的记录或记录在表中是否 共享相同的值。例如,可以搜索姓名字段中的重复值来确定同名学生是否为重复记录。

(1)在数据库窗口的“查询”选项卡中,单击“数据库”窗口工具栏上的“新建”按钮,

打开“新建查询”对话框。

(2)选择“查找重复项查询向导”选项,单击“确定”按钮,打开“查找重复项查询向 导”对话框。

(8)

(3)在“查找重复项查询向导”对话框中,选择用于搜寻重复字段值的表或查询,这里 选择“学生档案表”,如图 4.14 所示。

图 4.14 “查找重复项查询向导”对话框 1

(4)单击“下一步”按钮,在打开的对话框中选择可能包含重复信息的字段,这里选择

“姓名”,如图 4.15 所示。

图 4.15 “查找重复项查询向导”对话框 2

(5)单击“下一步”按钮,在打开的对话框中确定查询是否还显示带有重复值的字段之 外的其他字段,这里选择“性别”,如图 4.16 所示。

图 4.16 “查找重复项查询向导”对话框 3

(9)

(6)单击“下一步”按钮,打开查找重复项查询向导的完成对话框,如图 4.17 所示。在 此对话框中可以在“查看结果”和“修改设计”两个选项中选择。

图 4.17 “查找重复项查询向导”对话框 4

(7)输入查询名称,单击“完成”按钮。

4.3.4 查找不匹配项查询向导

使用“查找不匹配项查询向导”,可以在表中查找与其他记录不相关的记录。下面以查找 未选课学生为例介绍具体的操作步骤。

说明:“学生档案表”中是所有学生的记录,而“学生选课表”中是选课学生的记录,两 者进行不匹配查询就是找出在“学生档案表”中而不在“学生选课表”中的记录,这些记录就 是没有选课的学生,或者说实际上是两张表做了一个差运算。

(1)在数据库窗口的“查询”选项卡中,单击“数据库”窗口工具栏上的“新建”按钮,

打开“新建查询”对话框。

(2)选择“查找不匹配项查询向导”选项,单击“确定”按钮,打开“查找不匹配项查 询向导”对话框。

(3)在“查找不匹配项查询向导”对话框中,选择用于搜寻不匹配项的表或查询,这里 选择“学生档案表”(“学生档案表”包含所有学生的记录,未选课的学生一定在这张表中,

或者说这一步要选择的是查询结果包含在哪一张表中),如图 4.18 所示。

图 4.18 “查找不匹配项查询向导”对话框 1

(10)

(4)单击“下一步”按钮,选择哪张表或查询包含相关记录,在这里选择“学生选课表”

(这里要选择的是和(3)中所选表进行对比的表或查询),如图 4.19 所示。

图 4.19 “查找不匹配项查询向导”对话框 2

(5)单击“下一步”按钮,在此对话框中要确定两张表中相互关联的字段,例如,两张 表中都有一个“学号”字段(尽量选择主键,例如选择“姓名”可能会因为重名而造成查询结 果的错误),如图 4.20 所示。

图 4.20 “查找不匹配项查询向导”对话框 3

(6)在两张表中分别选择匹配的“学号”字段,单击 按钮。

(7)单击“下一步”按钮,在对话框中选择查询结果中所需的字段,如图 4.21 所示。

图 4.21 “查找不匹配项查询向导”对话框 4

(11)

(8)单击“下一步”按钮,打开“完成”对话框,输入查询名称,选择需要的选项后单 击“完成”按钮,如图 4.22 所示。

图 4.22 “查找不匹配项查询向导”对话框 5

4.3.5 查询准则

准则是指在查询中用来限制检索记录的条件表达式,它是算术运算符、逻辑运算符、常 量、字段值和函数等的组合。通过准则可以过滤掉很多不需要的数据。

1.简单准则表达式

简单准则表达式有字符型、数字型和表示空字段值的准则表达式。

(1)字符型。例如:“计算机系”表示字段值等于“计算机系”的字符串。“*计算机*”

表示其中含有“计算机”三个字的任何字符串。“计算机?”表示有四个字而且前三个字是“计 算机”的所有字符串。

(2)数字型。例如:“20”表示数字 20 或是 20 元钱、编号 20。“20*5-3”与表达式“97”

等价。

(3)表示空字段值。例如:“Is Null”或“为空”表示为空白的字段值。“Is Not Null”或

“为非空”表示不为空白的字段值。

2.运算符

运算符主要有关系运算符、逻辑运算符和特殊运算符。

(1)关系操作符,如表 4.2 所示。

表 4.2 关系操作符

运算符 含义 运算符 含义

> 大于 <= 小于等于

>= 大于等于 <> 不等于

< 小于 = 等于

(2)逻辑运算符,如表 4.3 所示。

(3)特殊运算符,如表 4.4 所示。

3.函数

Access 提供了大量的标准函数,如数值函数、字符函数、日期/时间函数和统计函数等。

利用这些函数可以更好地构造查询准则,也为用户更准确地进行统计计算、实现数据处理提供

(12)

了有效的方法。表 4.5 至表 4.8 分别给出了 4 种类型函数的说明。

表 4.3 逻辑运算符

运算符 形式 说明

And <表达式 1> And <表达式 2> 当 And 连接的表达式都为真时,整个表达式为真,否则为假 Or <表达式 1> Or <表达式 2> 当 Or 连接的表达式有一个为真时,整个表达式为真,否则为假 Not Not <表达式> 当 Not 连接的表达式为真时,整个表达式为假,否则为真

表 4.4 特殊运算符

运算符 说明

In 用于指定一个字段值的列表,查询的字段只要与列表中的任意一个匹配即满足要求 Between…And 用于指定一个字段值的范围,查询的字段只要在这个范围内即满足要求(注意:包

含临界值)

Like 用于指定查找文本字段的字符模式,通常配合通配符使用。具体的使用方法可参照 第 3 章的表 3.7

Is Null 用于指定一个字段为空 Is Not Null 用于指定一个字段为非空

表 4.5 数值函数

函数 说明

Abs(数值表达式) 返回数值表达式值的绝对值 Int(数值表达式) 返回数值表达式值的整数部分 Srq(数值表达式) 返回数值表达式值的平方根

Sgn(数值表达式) 返回数值表达式的符号值。当数值表达式值大于 0 时,返回值为 1;当数值 表达式值等于 0 时,返回值为 0;当数值表达式值小于 0 时,返回值为-1

表 4.6 字符函数

函数 说明

Space(数值表达式) 返回由数值表达式的值确定的空格个数组成的空字符串 String(数值表达式,字符表达式) 返回由字符表达式的第 1 个字符重复组成的长度为数值表达

式值的字符串

Left(字符表达式,数值表达式) 返回从字符表达式左侧第 1 个字符开始长度为数值表达式值 的字符串

Right(字符表达式,数值表达式) 返回从字符表达式右侧第 1 个字符开始长度为数值表达式值 的字符串

Len(字符表达式) 返回字符表达式的字符个数

Mid(字符表达式,数值表达式 1[,数值 表达式 2])

返回从字符表达式中第数值表达式 1 个字符开始,长度为数 值表达式 2 个的字符串。数值表达式 2 可以省略,若省略则 表示从第数值表达式 1 个字符开始直到最后一个字符为止

(13)

表 4.7 日期/时间函数

函数 说明

Day(date) 返回给定日期 1~31 的值。表示给定日期是一个月中的哪一天 Month(date) 返回给定日期 1~12 的值。表示给定日期是一年中的哪个月 Year(date) 返回给定日期 100~9999 的值。表示给定日期是哪一年

Weekday(date) 返回给定日期 1~7 的值。表示给定日期是一周中的哪一天(注意:默认周日 为一周的第一天)

Hour(date) 返回给定小时 0~23 的值。表示给定时间是一天中的哪个钟点

Date() 返回当前的系统日期

表 4.8 统计函数

函数 说明

Sum(字符表达式) 返回字符表达式中值的总和。字符表达式可以是一个字段名,也可以是一个 含字段名的表达式,但所含字段应该是数字数据类型的字段

Avg(字符表达式) 返回字符表达式中值的平均值。字符表达式可以是一个字段名,也可以是一 个含字段名的表达式,但所含字段应该是数字数据类型的字段

Count(字符表达式) 返回字符表达式中值的个数。字符表达式可以是一个字段名,也可以是一个 含字段名的表达式,但所含字段应该是数字数据类型的字段

Max(字符表达式) 返回字符表达式中值的最大值。字符表达式可以是一个字段名,也可以是一 个含字段名的表达式,但所含字段应该是数字数据类型的字段

Min(字符表达式) 返回字符表达式中值的最小值。字符表达式可以是一个字段名,也可以是一 个含字段名的表达式,但所含字段应该是数字数据类型的字段

在 Access 中建立查询时,经常会使用文本值作为查询的准则,表 4.9 给出了以文本值作 为准则的示例和功能说明。

表 4.9 使用文本值作为准则示例

字段名称 准则 功能

院系 "信息技术学院" 查询院系为信息技术学院的记录 课程名称 Like "计算机*" 查询课程名称以“计算机”开头的记录 民族 Not "汉" 查询所有民族不是汉族的记录

姓名 In("海楠","王平")或"海楠" or "王平" 查询姓名为海楠或王平的记录 姓名 Left([姓名],1)="王" 查询所有姓王的记录

学号 Mid([学号],3,2)="04" 查询学号第 3 位和第 4 位为 04 的记录

在 Access 中建立查询时,有时需要以计算或处理日期所得到的结果作为准则,表 4.10 列 举了一些应用示例和功能说明。

表 4.10 使用处理日期结果作为准则示例

字段名称 准则 功能

出生日期 Between #1980-1-1# And #1980-12-31#

或 Year([出生日期])=1980 查询 1980 年出生的记录 出生日期 Month([出生日期])=Month(Date()) 查询本月出生的记录

(14)

续表

字段名称 准则 功能

出生日期 Month([出生日期])=1980 And Day([出生日期])=4 查询 1980 年 4 月出生的记录

工作时间 >Date()-20 查询 20 天内参加工作的记录

4.4 对查询进行编辑

4.4.1 编辑查询中的字段 1.增加字段

在查询设计视图中增加一个或多个字段的操作步骤如下:

(1)在数据库窗口中,单击“对象”列表框中的“查询”选项卡,并单击选取需要修改 的查询。

(2)单击工具栏中的“设计”按钮,在查询设计视图中打开要修改的查询。

(3)根据需要分别采用以下方法在查询中加入字段:

如果需要一次增加多个字段,可以按下 Ctrl 键并在“关系”窗口的字段列表中单击 选取多个字段,然后直接用鼠标拖到需要添加字段的单元格上。

可以在空白的字段中填入新加的字段,然后单击查询设计视图中的字段选择器,系 统将选取整个字段列,将它拖到合适的位置即可。

如果想一次把整个表中的字段加进查询,可以简单地将查询设计视图的字段选择器 中代表所有字段的星号拖到合适的位置。

(4)单击工具栏中的“保存”按钮,保存对查询的修改。

2.删除字段

在查询设计视图中删除字段的方法很简单。操作步骤如下:

(1)在查询设计视图中打开要修改的查询。

(2)在查询设计视图的设计网格中,单击要删除字段的选择器,或按下 Shift 键单击选择 器以选取多个字段,如图 4.23 所示。

图 4.23 查询设计视图

(3)按 Del 键或选择“编辑”菜单中的“删除列”命令。

(15)

(4)单击工具栏中的“保存”按钮,保存对查询的修改。

3.移动字段

移动字段的操作步骤如下:

(1)在查询设计视图中打开要修改的查询。

(2)在查询设计视图的设计网格中,选取要移动的一个或多个字段。

(3)单击要选取字段的选择器,将它们拖到合适的位置。

(4)保存修改后,关闭设计视图即可。

4.在查询中修改字段的标题

设计网格中“字段”单元格中的字段名用来表示所选择的字段,一般情况下,它们将直 接显示在查询结果表的字段名中。一旦需要在结果中

显示不同于字段名的信息时,就需要修改字段的标题。

操作步骤如下:

(1)在查询设计视图中打开要修改的查询。

(2)将光标移动到要修改的字段上。

(3)单击工具栏中的“属性”按钮,弹出如图 4.24 所示的“字段属性”窗口。

(4)在“字段属性”窗口的“常规”选项卡中,

在“标题”文本框中输入字段的标题。

(5)关闭“字段属性”窗口。

(6)单击工具栏中的“保存”按钮即可。

单击工具栏中的“数据表视图”按钮,将会看见数据表中的字段名称已经变成了“标题”

文本框中的内容。

5.改变字段顺序

设计好一个查询后,在设计视图中看到的字段之间的排列顺序就是将来在查询中看到的 顺序。如果对当初设计的字段排列顺序不满意,可以使用拖动的方法改变字段之间的排列顺序。

具体操作步骤如下:

(1)单击要改变顺序的字段上方的列选择器来选择整个列。

(2)拖动该列移动到新位置上(在拖动过程中,可以看到字段的新位置将出现黑竖条,

可以据此确定字段的新位置)。

(3)释放鼠标左键,可以看到该字段已经移动到新位置上。

4.4.2 运行查询

在建立完成查询对象之后,应该保存设计完成的查询对象。其方法是,关闭查询设计视 图,在随后出现的“保存”对话框中指定查询对象的名称,然后确定。

对于一个设计完成的查询对象,可以在数据库窗口的“对象”列表的“查询”选项卡上 看到它的图标,用鼠标在一个查询对象上双击,即可运行这个查询对象。使用查询对象操作数 据也就是运行上述查询语句,称为运行查询。一个运行着的查询一般以查询视图的形式显示。

在数据库窗口中,单击“对象”列表中的“查询”项,选择需要打开的查询对象,单击 数据库窗口上的“打开”按钮,或双击需要打开的查询对象图标,即进入查询的数据表视图。

在打开的视图中可以看到,查询的数据表视图与表的数据表视图是形式完全相同的视图,不同 的是查询的数据表视图中显示的是一个动态数据集。

图 4.24 “字段属性”窗口

(16)

4.4.3 排序查询的结果

排序可以令某一列数据有顺序地排列,以便于查看。在设计查询对象时,若需要某列的数 据有顺序地排列,可以单击位于该列排序行上的下拉列表框,从中选择所需的排序种类。

4.5 选择查询

选择查询是 Access 支持的多种类型查询对象中最常见、最重要的一种,它从一个或多个 表中根据准则检索数据。它的优点在于能将一个或多个表中的数据集合在一起。选择查询不仅 可以完成数据的筛选、排序等操作,更常见的功能在于它的计算功能、总汇统计功能以及接受 外部参数的功能,即计算查询和参数查询。同时,选择查询还是创建其他类型查询的基础。

本节将通过示例介绍如何设计一个简单的选择查询。例如,查找单科成绩大于 85 分的学 生记录,并显示学生所在院系、学号、姓名。在这个查询中需要将“学生档案表”和“学生成 绩表”的数据放在一起,找出单科成绩大于 85 分的学生。创建查询的步骤如下:

(1)双击“查询”对象中的“在设计视图中创建 查询”选项。屏幕上显示查询设计视图窗口,同时在 视图上显示了一个“显示表”对话框,如图 4.25 所示。

(2)在“显示表”对话框中有 3 个选项卡,分别 是“表”、“查询”、“两者都有”。如果建立查询的数据 源来自表,则单击“表”选项卡;如果建立查询的数 据源来自自己建立的查询,则单击“查询”选项卡;

如果建立查询的数据源来自表和自己建立的查询,则 单击“两者都有”选项卡。这里单击“表”选项卡。

(3)双击“学生档案表”,将“学生档案表”添

加到查询设计视图窗口上半部分的窗格中。然后使用同样的方法将“学生成绩表”添加到查询 设计视图窗口上半部分的窗格中。之后单击“关闭”按钮。

(4)依次单击“学生档案表”中的“院系”、“学号”、“姓名”,“学生成绩表”中的“成 绩”字段,使这些字段显示在设计网格的“字段”行上。

(5)在“成绩”字段列的“条件”行中输入条件“>85”,并取消“显示”复选框的选定

(因为成绩只是作为查询条件,而不显示在查询结果中),结果如图 4.26 所示。

图 4.26 设置查询准则

图 4.25 “显示表”对话框

(17)

(6)单击工具栏上的“保存”按钮 ,这时出现“另存为”对话框,在“查询名称”文 本框中输入“单科成绩大于 85 分”,如图 4.27 所示。

图 4.27 “另存为”对话框

(7)单击“确定”按钮。

提示:如果生成的查询不完全符合要求,可以在设计视图中更改查询。

可以对相同的字段或不同的字段输入多个条件。在多个“条件”单元格中输入表达式时,

Microsoft Access 将使用 And 或 Or 运算符进行组合。如果此表达式是在同一行的不同单元格 中,Microsoft Access 将使用 And 运算符,表示将返回匹配所有单元格中条件的记录。如果表 达式是在设计网格的不同行中,Microsoft Access 将使用 Or 运算符,表示匹配任何一个单元格 中准则的记录都将返回。

4.6 计算查询

1.创建计算查询

在建立查询时,有时可能关心查询记录,有时可能关心记录的计算结果。通过查询操作 完成表内部或各表之间数据的运算是建立查询对象的一个常用功能。完成计算操作是通过在查 询的对象中设计计算查询列实现的。下面以院系统计学生人数为例介绍计算查询的创建过程。

(1)双击“查询”对象中的“在设计视图中创建查询”选项,屏幕上显示查询设计视图 窗口,同时显示一个“显示表”对话框。

(2)在“显示表”对话框中,单击“表”选项卡,然后双击“学生档案表”,将“学生 档案表”添加到查询设计视图窗口上半部分的窗格中。单击“关闭”按钮。

(3)依次双击“学生档案表”中的“院系”和“学号”字段,将它们添加到设计网格的

“字段”行中。

(4)单击工具栏上的“合计”按钮 ,这时 Access 在设计网格中插入一个“总计”行,

并自动将“院系”和“学号”字段的“总计”行设置成“分组”(Group By)。

(5)单击“学号”字段的“总计”行,并单击其右边的下三角按钮,从下拉列表中选择

“计数”(count),结果如图 4.28 所示。

(6)单击工具栏上的“保存”按钮,在出现的“另存为”对话框的“查询名称”文本框 中输入“按院系统计学生人数”,保存查询。

运行查询的结果如图 4.29 所示。

在查询中执行计算的注意事项如下:

(1)如果要在字段中显示计算的结果,可以使用 Microsoft Access 提供的预定义计算或自 定义计算。使用所谓“总计”的预定义计算可以计算出记录组或全部记录的下列量值:总计

(Sum)、平均值(Avg)、计数(Count)、最小值(Min)、最大值(Max)、标准偏差(StDev)

或方差(Var)。可以对每个字段选择要进行的总计计算。

(18)

图 4.28 设置分组总计项 图 4.29 查询结果

(2)“计数”(Count)在计算时不能包括有空值(Null)的记录,即“计数”(Count)返 回所有无 Null 值记录的数量。有一种方法可以对 Null 值进行计数,另外也可以将 Null 值转 换为零以便进行计算。如果要查找包含 Null 值的记录总数,请在“计数”(Count)中使用星 号(*)通配符。

(3)在字段中显示计算结果时,结果实际并不存储在查询中。相反地,Microsoft Access 在 每次执行查询时都将重新进行计算,以使计算结果永远以数据库中最新的数据为准。因此,不 能人工更新计算结果。

如图 4.28 所示的窗口中“总计”行中其他值的含义如表 4.11 所示。

表 4.11 在总计行中的其他值的含义

含义

分组(Group By) 定义要执行计算的组,将记录与指定字段中的相等值组合成单一记录 表达式(Expression) 创建表达式中包含合计函数的计算字段。通常在表达式中使用多个函

数时将创建计算字段

条件(Where) 指定不用于分组的字段准则。如果选定这个字段选项,Microsoft Access 将清除“显示”复选框,隐藏查询结果中的这个字段

第一条记录(First) 求表或查询中第一条记录的字段值 最后一条记录(Last) 求表或查询中最后一条记录的字段值

2.修改显示标题

在如图 4.29 所示的查询结果中,用来计数的字段标题为“学号之计数”,显然这样的显示 可读性差,应该调整。方法有两种,第一种方法是采用 4.4.1 节中通过“字段属性”窗口在查 询中修改字段的标题;第二种方法是直接在设计网格的“字段”行进行修改,操作步骤如下:

(1)在查询设计视图中打开“按院系统计学生人数”查询。

(2)在“字段”行的“学号”单元格中加入“人数:”,如图 4.30 所示。

(3)保存对查询的修改。

运行查询的结果如图 4.31 所示。

3.添加计算字段

当需要统计的数据在表中没有相应的字段或者用于计算的数据值来源于多个字段时,这 时应该在设计网格中添加一个计算字段,计算字段是指根据一个或多个表中的一个或多个字段

(19)

并使用表达式建立的新字段。

图 4.30 修改显示标题后的查询设计视图

图 4.31 修改显示标题后的查询结果

下面以计算每位学生每门课程的重修费用为例,介绍添加计算字段的操作步骤。

(1)在“数据库”窗口的“对象”列表下选中“查询”,双击“在设计视图中创建查询”,

打开查询设计窗口,并显示“显示表”对话框,依次双击“学生档案表”和“学生成绩表”,

关闭“显示表”对话框。

(2)确保两张表之间的关联关系已经创建,依次双击字段列表区“学生档案表”中的“院 系”、“学号”、“姓名”字段和“学生成绩表”中的“成绩”字段,将它们加入到设计网格中,

如图 4.32 所示。

图 4.32 查询设计视图

(3)撤消选中“成绩”字段的“显示”复选框,并在“成绩”字段列的“条件”行中输

(20)

入“<60”,在“院系”字段列的“排序”列表框中选择“升序”,如图 4.33 所示。

图 4.33 设计查询准则

(4)在设计网格的第一个空白列的“字段”行输入“费用:[学分]*50”,其中“费用”为 显示标题,“[学分]*50”为计算表达式(假设每学分重修费用为 50 元),选中“显示”复选框,

如图 4.34 所示。

图 4.34 添加计算字段后的查询设计视图

(5)单击工具栏上的“保存”按钮,出现“另存为”对话框,将该查询命名为“重修费 用”,单击“确定”按钮,完成查询的设计过程。

运行查询的结果如图 4.35 所示。

图 4.35 查询结果

某些情况下需要将某几个字段的内容合二为一输出,最简单快捷的方法也是通过添加计

(21)

算字段实现的。下面以“学生档案表”为例,要求将“学号”和“姓名”字段合二为一输出,

字段的标题为“学号姓名”,其操作步骤如下:

(1)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查询”,

打开查询设计窗口,并显示“显示表”对话框,双击“学生档案表”将它加入到查询设计窗口 中,关闭“显示表”对话框。

(2)在设计网格的第一个空白列的“字段”行中输入“学号姓名:[学号]+[姓名]”,其中

“学号姓名”为显示标题,“[学号]+[姓名]”是将“学号”和“姓名”字段的内容连接在一起 作为本列的输出内容(“+”为连接运算符),选中“显示”复选框,如图 4.36 所示。

(3)单击工具栏上的“保存”按钮,出现“另存为”对话框,将查询命名为“学号姓名”,

单击“确定”按钮,完成查询的设计过程。

运行查询的结果如图 4.37 所示。

图 4.36 添加计算字段后的查询设计视图 图 4.37 查询结果

4.7 参数查询

前面所建立的查询无论是内容还是条件都是固定的,如果用户希望根据不同的条件来查 找记录,就需要不断建立查询,这样做很麻烦。为了方便用户的查询,Access 提供了参数查 询。参数查询是动态的,它利用对话框提示用户输入参数并检索符合所输入参数的记录或值。

要创建参数查询,必须在查询设计网格的“条件”单元格中输入参数表达式(括在方括 号中),而不是输入特定的条件。运行该查询时,Access 将显示包含参数表达式文本的参数提 示框。在输入数据后,Accees 使用输入的数据作为查询条件。下面简单介绍“按院系查找不 及格学生”查询的创建过程。

(1)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查询”,

打开查询设计窗口,并显示“显示表”对话框,依次双击“学生档案表”和“学生成绩表”,

关闭“显示表”对话框。

(2)在查询设计视图的字段列表区依次双击“学生档案表”中的“院系”、“学号”、“姓 名”字段和“学生成绩表”中的“成绩”字段,将它们加入到设计网格的“字段”行中。

(3)在“院系”字段列的“条件”行中输入“[请输入院系名称:]”,在“成绩”字段列 的“条件”行中输入“<60”,并撤消选中“显示”复选框,如图 4.38 所示。

(22)

图 4.38 查询设计视图

(4)单击工具栏上的“保存”按钮,出现“另存为”对话框,将查询命名为“按院系查 找不及格学生”,单击“确定”按钮,完成查询的设计过程。

运行查询时会首先弹出如图 4.39 所示的“输入参数值”对话框,在“请输入院系名称”

文本框中输入指定院系的名称,单击“确定”按钮,查询结果如图 4.40 所示。

图 4.39 “输入参数值”对话框 图 4.40 查询结果

创建参数查询时,不仅可以使用一个参数,也可以使用两个或两个以上的参数。多个 参数查询的创建过程与一个参数查询的创建过程完全一样,只是在查询设计视图窗口中将 多个参数的准则都放在“条件”行上,如图 4.41 所示是“按学号和课程名称查询学生成绩”,

运行查询时会依次弹出两个“输入参数值”对话框,分别提示用户输入“学号”和“课程 名称”。

图 4.41 多参数查询设计视图

(23)

4.8 操作查询

选择查询可以从表中检索数据,通过利用表达式可以对字段中的数据进行计算来筛选数 据。但是,如果要修改数据,就要使用操作查询。

Access 中有 4 种类型的操作查询。

更新查询:替换现有数据。

追加查询:在现有表中添加新记录。

删除查询:从现有表中删除记录。

生成表查询:创建新表。

4.8.1 保护数据

创建操作查询时,首先要保护数据,因为操作查询会改变数据。在多数情况下,这些改 变是不能恢复的,这就意味着操作查询具有破坏数据

的能力。在使用删除、更新或追加查询时,如果希望 操作更安全一些,就应该先对相应的表进行备份,然 后再运行操作查询。

创建表的备份的操作步骤如下:

(1)单击数据库窗口的表,按 Ctrl+C 键。

(2)按 Ctrl+V 键,Access 会显示“粘贴表方式”

对话框,如图 4.42 所示。

(3)为备份的表指定新表名。

(4)选中“结构和数据”单选按钮,单击“确定”按钮将新表添加到数据库窗口中,此 备份的表和原表完全相同。

4.8.2 更新查询

如果要对数据表中的某些数据进行有规律的成批的更新替换操作,可以使用更新查询来 实现。例如,现在需要将“学生档案表”中院系为“数理学院”的记录改为“物理学院”。如 果在数据表视图中采用手工操作,将是一件很繁琐的事情,而设计一个更新查询可以很方便地 完成这样的操作。步骤如下:

(1)备份“学生档案表”(粘贴选项选择“结构和数据”单选按钮),将新表命名为“学 生档案表备份”。

(2)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查 询”,打开查询设计窗口,并显示“显示表”对话框,双击“学生档案表备份”,关闭“显 示表”对话框。

(3)双击查询设计视图中字段列表区“学生档案表备份”中的“院系”字段,将它加入 到设计网格的“字段”行中。

(4)单击菜单栏上“查询”菜单中的“更新查询”命令,此时可以看到在查询设计视图 中新增了一个“更新到”行,在“条件”行中输入“数理学院”,在“更新到”行中输入“物 理学院”,如图 4.43 所示。

图 4.42 “粘贴表方式”对话框

(24)

图 4.43 更新查询设计视图

(5)单击工具栏上的“保存”按钮,出现“另存为”对话框,将查询命名为“修改院系 名称”,单击“确定”按钮,完成查询的设计过程。

运行查询时会出现如图 4.44 所示的提示框,确定要修改请选择“是”,在数据表视图中打 开“学生档案表备份”会发现修改后的结果;放弃修改请选择“否”。

图 4.44 “更新查询”提示框

有些情况下,更新工作是在字段值的原有基础上进行的,或者说要求原有字段内容是更 新后字段内容的组成部分。例如,将“学生档案表备份”中的“学号”字段前加“20”,其操 作步骤如下:

(1)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查询”,

打开查询设计窗口,并显示“显示表”对话框,双击“学生档案表备份”,关闭“显示表”对 话框。

(2)双击查询设计视图中字段列表区“学生档案表备份”中的“学号”字段,将它加入 到设计网格的“字段”行中。

(3)单击菜单栏上“查询”菜单中的“更新查询”命令,在“更新到”行中输入“"20"+[学 号]”,如图 4.45 所示。

运行查询时会出现如图 4.46 所示的提示框,确定要修改请选择“是”,在数据表视图中打 开“学生档案表备份”会发现修改后的结果;放弃修改请选择“否”。

在实际的应用过程中更新查询往往还需要通过用户指定更新参数来确定更新的对象,需 要结合参数查询来实现,如图 4.47 所示的查询设计视图就是根据用户输入的学号和课程名称 对成绩进行调整。

运行查询会依次出现如图 4.48、图 4.49 和图 4.50 所示的三个“输入参数值”对话框。

注意:本例是调整分数,应该是在原有成绩的基础上进行操作,所以“更新到”行中的 内容为“[成绩]+[请输入调整的分数:]”,其中“[成绩]”是引用“成绩”字段的值,“[请输入 调整的分数:]”才是真正的参数。

(25)

图 4.45 更新查询设计视图

图 4.46 “更新查询”提示框

图 4.47 带有参数的更新查询设计视图 图 4.48 “输入参数值”对话框 1

图 4.49 “输入参数值”对话框 2 图 4.50 “输入参数值”对话框 3

4.8.3 追加查询

如果需要从数据库的某个数据表中筛选数据,可以使用选择查询。如果需要将这些筛选 出来的数据追加到另外一个结果相同的数据表中,则必须使用追加查询。因此,可以使用追加 查询从外部数据源中导入数据,然后将它们追加到现有表中,也可以从其他的 Access 数据库 甚至同一数据库的其他表中导入数据。与选择查询和更新查询类似,追加查询的范围也可以利

(26)

用条件加以限制。

先看一个简单的追加查询示例。按照下面的步骤将“学生档案表”中的记录追加到一个 结构类似、内容为空的表中。

(1)使用 4.8.1 节中的方法,创建“学生档案表”结构的副本(由于只需要复制表的结 构,不需要复制数据,所以在“粘贴选项”列表中选择“只粘贴结构”单选按钮),将副本命 名为“学生档案表副本”,如图 4.51 所示。

图 4.51 “粘贴表方式”对话框

(2)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查询”,

打开查询设计视图,并显示“显示表”对话框,双击“学生档案表”,关闭“显示表”对话框。

(3)在查询设计视图的字段列表区中双击“学生档案表”中的星号,将它加入到设计网 格的“字段”行中。

(4)选择“查询”菜单中的“追加查询”命令,打开“追加”对话框,从“表名称”下 拉列表中选择“学生档案表副本”,如图 4.52 所示,单击“确定”按钮。

图 4.52 “追加”对话框

(5)回到设计视图,单击工具栏上的“保存”按钮,给查询命名,单击“确定”按钮完 成查询的设计过程。

(6)执行“查询”菜单中的“运行”命令,出现如图 4.53 所示的提示框,确定要追加请选 择“是”,在数据表视图中打开“学生档案表副本”会发现追加后的结果;放弃追加请选择“否”。

图 4.53 “追加查询”提示框

在实际的应用过程中,追加查询往往是带有条件的操作,如图 4.54 所示的查询设计视图 就是将成绩大于 85 分的学生记录追加到“优秀学生表”中(注意:应先建立“优秀学生表”)。

(27)

图 4.54 带有条件的追加查询设计视图

4.8.4 删除查询

如果需要从数据库的某个数据表中有规律地成批删除一些记录,可以使用删除查询来解 决。应用删除查询对象成批地删除数据表中的记录应该指定相应的删除条件,否则就会删除数 据表中的全部数据。下面通过一个示例——删除“学生档案表副本”中所有 02 级学生记录来 学习删除查询(假设学号的前两位表示年级),步骤如下:

(1)在“数据库”窗口的“对象”列表中选中“查询”,双击“在设计视图中创建查询”,

打开查询设计视图,并显示“显示表”对话框,双击“学生档案表副本”,关闭“显示表”对 话框。

(2)在查询设计视图的字段列表区双击“学生档案表副本”中的“学号”字段,将它加 入到设计网格的“字段”行中。

(3)选择“查询”菜单中的“删除查询”命令,即可看到在查询设计视图中新增了一个

“删除”行,该行中有 Where 字样。

(4)在查询设计视图的“条件”行中输入删除准则“Like "02*"”,如图 4.55 所示。

图 4.55 删除查询设计视图

(5)单击工具栏上的“保存”按钮,出现“另存为”对话框,将查询命名为“删除 02 级学生记录”,单击“确定”按钮,完成查询的设计过程。

运行查询时会出现如图 4.56 所示的提示框,确定要删除请选择“是”,在数据表视图中打 开“学生档案表副本”会发现删除后的结果;放弃删除请选择“否”。

(28)

图 4.56 “删除查询”提示框 注意:

(1)如果要用子查询来定义字段的条件,在要设置条件的“条件”单元格中输入一条 SELECT 语句,并将 SELECT 语句放置在括号中。

(2)如果要用子查询定义“字段”单元格,可以在“字段”单元格的括号内输入一个 SELECT 语句。

4.9 SQL 查询

在使用数据库的过程中经常会用到一些查询,但这些查询用各种查询向导和设计器都无法 做出来,此时使用 SQL 查询可以完成比较复杂的查询工作。SQL 语言作为一种通用的数据库 操作语言并不是 Access 用户必须要掌握的,但在实际的工作中有时必须用到这种语言才能完 成一些特殊的工作。

当今所有关系型数据库管理系统都是以 SQL 为核心的。SQL 概念的建立起始于 1974 年,

随着 SQL 的发展,ISO、ANSI 等国际权威标准化组织都为其制定了标准,从而确立了 SQL 在数据库领域里的核心地位。单纯的 SQL 语言包含的语句并不多,但在使用过程中需要大量 输入各种表、查询和字段的名字。这样当建立一个涉及大量字段的查询时就需要输入大量文字,

与用查询设计视图建立查询相比就麻烦多了。所以在建立查询的时候应该先在查询设计视图中 将基本的查询功能都实现了,最后再切换到 SQL 视图通过编写 SQL 语句完成一些特殊的查询。

使用 SQL 查询创建的查询有以下 4 种:联合查询、传递查询、数据定义查询和子查询。下面 就简要介绍使用 SQL 语句创建这 4 种查询的方法。

4.9.1 SQL 查询视图的切换

在建立查询的时候可以切换到 SQL 视图中,下面看看是怎么切换的。

在“数据库”窗口的“对象”列表下选中“查询”(如图 4.57 所示),单击“新建”按钮,

会发现在弹出的“新建查询”对话框的列表中并没有“使用 SQL 视图创建查询”选项,如图 4.58 所示。

图 4.57 “数据库”窗口 图 4.58 “新建查询”对话框

(29)

这也表明 Access 并不提倡在工作中使用 SQL 语言,在“新建查询”对话框中双击“设计 视图”,并直接关闭弹出的“显示表”对话框,之后将会在屏幕上出现一个设计视图,如图 4.59 所示。

图 4.59 查询设计视图

要切换到 SQL 视图,只要将鼠标移动到工具栏最左面的“视图”选项按钮 右边的下 三角按钮上单击,在弹出的菜单中选中“SQL 视图”项就可以将视图切换到 SQL 状态,如图 4.60 所示。

图 4.60 SQL 视图

4.9.2 联合查询

联合查询可以将两个或两个以上的表或查询所对应的多个字段的记录合并为一个查询表 中的记录。执行联合查询时,将返回所包含的表或查询中对应字段的记录。创建联合查询的唯 一方法是使用 SQL 窗口。

这里将用到 SQL 中的 SELECT 语句,其主要功能是实现数据源数据的筛选、投影和连接 操作,并能够完成筛选字段的重命名、对数据源数据的组合、分类汇总、排序等具体操作,具 有非常强大的数据查询功能。

SELECT 语句的一般语法格式为:

SELECT[predicate]{*|table.*|[table.]field1[AS alias1][,[table.]field2[AS alias2][,…]]}

FROM tableexpression[,…][IN externaldatabase]

[WHERE…]

[GROUP BY…]

(30)

[HAVING…]

[ORDER BY…]

[WITH OWNERACCESS OPTION]

在 SELECT 语法格式中,大写字母为 SQL 保留字,方括号所括部分为可有可无的内容,

小写字母为语句参量。各个参量的说明如下:

predicate:取 ALL、DISTINCT、DISTINCTROW、TOP 中的一个谓词。可用谓词来 限制返回记录的数量,默认值为 ALL。

*:全部字段,从特定的表中指定全部字段。

table:取表的名称。

field1:取字段的名称,包含要获取的数据。

alias1:取字串常量,用作列标头。

tableexpression:取表的名称,包含要获取的数据。

externaldatabase:取数据库的名称,该数据库包含 tableexpression 中的表。

WHERE:只筛选满足给定条件的记录。

HAVING:分组准则,设定 GROUP BY 后再设定应显示的记录。

GROUP BY:根据所列字段名分组。

ORDER BY:根据所列字段名排序。

下面使用联合查询将“教师表”中的“教师姓名”和“所属院系名称”字段与“学生档 案表”中的“姓名”和“院系”字段内容合并起来显示输出。步骤如下:

(1)在数据库窗口的“对象”列表中单击“查询”,单击数据库窗口工具栏上的“新建”

按钮,选择“设计视图”,然后单击“确定”按钮。

(2)关闭“显示表”对话框。

(3)在“视图”按钮的下拉列表中选择“SQL 视图”,打开 SQL 窗口。

(4)在窗口中添加如图 4.61 所示的语句。

(5)查询结果如图 4.62 所示。

图 4.61 添加 SQL 语句 图 4.62 SQL 查询结果 注意:

(1)要为两个 SELCET 语句以相同的顺序指定相同的字段——SQL 语句的列数相同,并 且相应列的数据类型也相同。此时,Access 不会关心每个列的名称。当列的名称不相同时,

查询会使用来自第一个 SELECT 语句的名称。

(2)如果不需要返回重复记录,可以输入带有 UNION 运算的 SQL SELECT 语句;如果 需要返回重复记录,可以输入带有 UNION ALL 运算的 SQL SELECT 语句。也就是将上面的 例子改为:

(31)

SELECT 教师姓名,所属院系名称 FROM 教师档案表

UNION ALL SELECT 姓名,院系 FROM 学生档案表;

(3)如果要在联合查询中指定排序,应在最后一个 SELECT 语句的末端添加一个 ORDER BY 从句。在 ORDER BY 从句中指定要排序的字段名,并且该字段必须来源于第一个 SELECT 语 句。也就是将上面的例子改为:

SELECT 教师姓名,所属院系名称 FROM 教师档案表

UNION SELECT 姓名,院系 FROM 学生档案表

ORDER BY 教师姓名;

4.9.3 传递查询

Access 传递查询可以直接将命令发送到 ODBC 数据库服务器。使用传递查询不必连接服 务器上的表就可以直接使用相应的表。应用传递查询的主要目的是为了减少网络负荷。使用传 递查询会为查询添加 3 个新属性,分别是:

(1)ODBC 连接字符串:指定 ODBC 连接字符串,默认值为 ODBC。

(2)返回记录:指定查询是否返回记录,默认值为“是”。

(3)日志消息:指定 Access 是否将来自服务器的警告和信息记录在本地表中,默认值为

“否”。

可以按照下面的步骤创建一个传递查询:

(1)在数据库窗口的“对象”列表中单击“查询”,单击数据库窗口工具栏上的“新建”

按钮,选择“设计视图”,然后单击“确定”按钮。

(2)关闭“显示表”对话框。

(3)选择“查询”菜单中的“SQL 特定查询”命令,然后在打开的子菜单中选择“传递”

命令,打开“SQL 传递查询”窗口。

(4)单击工具栏上的“属性”按钮,显示查询的属性窗口,设置“ODBC 连接字符串”

属性。该属性将指定 Access 执行查询所需的连接信息,如图 4.63 所示。可以输入连接信息或 单击“生成”按钮,以获得关于要连接的服务器的必要信息。

图 4.63 “查询属性”窗口

(5)在 SQL 传递查询窗口中输入查询。

(32)

(6)单击“运行”按钮,执行该查询。

4.9.4 数据定义查询

数据定义查询是 SQL 的一种特定查询。使用数据定义查询可以在数据库中创建或更改对 象。使用数据定义查询可以在当前数据库中创建、删除、更改表或创建索引,每个数据定义查 询只包含一条数据定义语句。

用 SQL 数据定义查询处理表或索引的操作步骤如下:

(1)在“数据库”窗口的“对象”列表中选中“查询”,单击“数据库”窗口工具栏上 的“新建”按钮,选择“设计视图”,然后单击“确定”按钮。

(2)关闭“显示表”对话框。

(3)选择“查询”菜单中的“SQL 特定查询”命令,然后在打开的子菜单中选择“数据 定义”命令,打开“数据定义查询”窗口。

(4)在“数据定义查询”窗口中输入 SQL 语句。Access 支持下列数据定义语句:

CREATE TABLE:创建表。CREATE TABLE 语句不会覆盖已经存在的同名表,如果 表已经存在,会返回一个错误消息,并取消这一任务。

下面的语句创建一个名为 Newtable 的新表,表中有两个字段 name1 和 name2。

CREATE TABLE Newtable ( name1 TEXT,name2 TEXT );

ALTER TABLE:在已有表中添加新字段、删除字段和添加约束等。

添加字段、约束:ALTER TABLE 表名 ADD 字段名称 数据类型 删除字段、约束:ALTER TABLE 表名 DROP 字段名称

修改字段:ALTER TABLE 表名 ALTER 字段名称 数据类型

DROP:从数据库中删除表,或者从字段或字段组中删除索引。注意,一定要慎用 DROP TABLE 语句,一旦使用以后就无法恢复表或其中的数据。

下面的语句从“学生选课管理系统”数据库中删除“学生档案表”: DROP TABLE 学生档案表;

下面的语句从“学生选课管理系统”数据库中删除“学生档案表”中名为“姓名”

的索引:

DROP INDEX 姓名 ON 学生档案表;

CREATE INDEX:为字段或字段组创建索引。索引可以由多个字段组成,只需列出 多个字段并用逗号分隔。该语句的最简单形式如下:

CREATE INDEX 索引名 ON 表(字段);

得到的索引是基于单个字段的,允许有重复值,而且不能基于主键,为了避免索引 字段的重复,添加如下格式的 UNIQUE 保留字:

CREATE UNIQUE INDEX 索引名 ON 表(字段);

要指明索引字段是主键,使用如下格式的 PRIMARY 保留字:

CREATE INDEX 索引名

ON 表(字段) WITH PRIMARY;

(5)运行查询。

(33)

4.9.5 子查询

使用子查询可以定义字段或定义字段的条件,但子查询不能单独作为一个查询,它必须 与其他查询相结合,通常是作为另外一个查询的字段、条件使用,操作步骤如下:

(1)新建一个查询,将所需的字段添加到设计视图的设计网格中。

(2)如果要用子查询定义字段的条件,在要设置条件的“条件”单元格中输入一条 SELECT 语句,并将 SELECT 语句放置在括号中。

(3)如果要用子查询定义“字段”单元格,可以在“字段”单元格的括号内输入一条 SELECT 语句。

下面以查询比胡佳年龄小的同学记录为例介绍子查询的使用方法。

(1)在设计视图中创建如图 4.64 所示的查询。

图 4.64 查询设计视图

(2)在“出生日期”字段下的“条件”行中输入“>(SELECT 出生日期 FROM 学生档 案表 where 姓名='胡佳')”,如图 4.65 所示。

图 4.65 添加子查询后的设计视图

说明:子查询的作用是找出胡佳的出生日期,在这个出生日期之后出生的同学就是比胡 佳小的同学。(注意:时间的比较和数字的比较是不同的)

(3)保存查询的名称为“年龄比胡佳小的同学”,运行查询的结果如图 4.66 所示。

(34)

图 4.66 查询结果

4.9.6 用 SQL 语句实现各种查询

可以利用 SQL 查询实现前面所讲的各种查询,如下所示:

1.选择查询

例如,查找没有选课的学生,并显示学生所在的院系和姓名。

SELECT 院系,姓名 FROM 学生档案表 WHERE 学号 NOT IN ( SELECT 学号 FROM 学生选课表 );

2.计算查询

例如,计算各院系的教师人数。

SELECT 所属院系名称, Count(教师姓名) AS 教师人数 FROM 教师档案表

GROUP BY 所属院系名称;

3.参数查询

例如,按输入的院系名称查找该院系的学生。

SELECT 学号,姓名,性别 FROM 学生档案表

WHERE 院系=[请输入院系名称:];

4.操作查询

(1)更新查询。

UPDATE 学生成绩表 SET 成绩=[成绩]+10

WHERE 学号="0221325014" AND 课程代码="001";

(2)追加查询。

INSERT INTO 学生档案表副本 SELECT 学生档案表.*

FROM 学生档案表;

(3)删除查询。

DELETE * FROM 学生选课表 WHERE 学号='0221325014';

本章小结

通过本章的学习,应理解 Access 查询对象的作用及其实质,了解 SQL 语言的基本知识,

(35)

掌握 Access 查询对象的创建与设计方法,学习 Access 查询对象的应用技术。

应用 Access 的查询对象是实现关系数据库操作的主要方法,借助于 Access 为查询对象提 供的可视化工具不仅可以很方便地进行 Access 查询对象的创建、修改和运行,而且可以使用 这个工具生成合适的 SQL 语句,直接将其粘贴到需要该语句的程序代码或模块中。这将会非 常有效地减轻编程工作量,也可以完全避免在程序中编写 SQL 语句时容易产生的错误。

习 题

1.查询的优点是什么?

2.叙述 Access 查询对象的作用及其与 Access 数据表对象的差别。

3.根据对数据源操作方式和结果的不同,查询可以分为 5 类: 、计算查 询、 、操作查询和 SQL 查询。

4.在 Access 中,用户可以使用 SQL 语句创建查询,使用 SQL 创建的查询有以下 4 种: 、传递查询、 和子查询。

5.在什么情况下需要设计 Access 的交叉表查询?

6.在什么情况下需要设计 Access 的更新查询?

7.在什么情况下需要设计 Access 的追加查询?

8.在什么情况下需要设计 Access 的删除查询?

數據

表 4.7    日期/时间函数  函数  说明  Day(date)    返回给定日期 1~31 的值。表示给定日期是一个月中的哪一天  Month(date)    返回给定日期 1~12 的值。表示给定日期是一年中的哪个月  Year(date)    返回给定日期 100~9999 的值。表示给定日期是哪一年  Weekday(date)    返回给定日期 1~7 的值。表示给定日期是一周中的哪一天(注意:默认周日 为一周的第一天)  Hour(date)    返回给定小时 0~23 的值。表

參考文獻

相關文件

語文學習 資源和

建議多協助學生進 行運用工具實作的 機會,亦可嘗試將 部分概念以圖像化 (如流程圖、太陽 圖等)的形式呈現

• 內建元件庫(Common Libraries)則存放了 Flash 提供 的元件,讓使用者自由使用。Flash 內建的元件庫共有 3

一般而言,信用卡主可直接 在櫃員機提取現金或以其他 轉賬方式動用信用限額內的 現金,這是一種便利但相當 昂貴的借貸方法. 利息

对于二元函数的自变量,我

对于电磁现象,尽管我们仍然还是从力学的角度来理解各种各样的物理对象以及物理过程,但最关键

Registry Server 是建構於第三方具有公信力的一個組織,而 Registry Server 在 Web Service 的架構中,主要的功能類似於提供服務查詢(Yellow

由於 Android 作業系統的開放性和可移植性,它可以被用在大部分電子產品 上,Android 作業系統大多搭載在使用了 ARM 架構的硬體設備上使裝置更加省電