第3章 查询的基本操作 数据查询是数据库管理系统的基本功能。在数据库操作中,很大一部分工作是对数据进行统计、计算与检索。查询是Access处理和分析数据的工具,它能够使用多种方法来查看、更改或分析数据,也可以将查询结果作为窗体和报表的数据源。本章将详细介绍查询的基本概念,以及各种查询的建立和使用方法。 3.1概述 查询(Query)是Access 2016数据库中的一个重要对象,它与表、窗体、报表、宏和模块等对象存储在一个数据库文件中。查询就是按给定的要求(包括条件、范围、方式等)从指定的数据源中查找,检索出需要的数据形成一个新的数据集合。查询本身并不存储数据,它是一个对数据库的操作命令。每次运行查询时,Access便从查询源表的数据中创建一个新的记录集,使查询中的数据能够和源表中的数据保持同步。 查询的数据源可以是一个表,也可以是多个相关联的表,还可以是其他查询。查询结果称为结果集,是符合查询条件的记录集合。查询的结果可以生成窗体、报表,还可以作为另一个查询的基础。在Access数据库中,查询是一种统计和分析数据的工作,是对数据库中的数据进行分类、筛选、添加、删除和修改。 3.1.1查询的功能 Access 2016的查询功能非常强大,提供的方式也非常灵活,可以使用多种方法来实现查询数据的目标。 1. 选择数据 查询可以从一个或多个表中选择部分或全部字段,也可以从一个或多个表中将符合某个指定条件的记录选取出来。在Access 2016中,用来提供选择数据的表称为查询操作的数据源,作为查询数据源的对象也可以是已建立好的其他查询。 选择记录的条件称为查询准则,也就是查询表达式。查询结果是一种临时表,又称为动态的记录集,通常不被保存。也就是说,每次运行查询,系统都是按事先定义的查询准则从数据源中提取数据,这样既可以节约存储空间,又可以保持查询结果与数据源中数据的同步。 2. 排序记录 查询可以按照某一特定的顺序查看动态集的信息。 3. 执行计算 使用查询可以进行一系列的计算,如统计不同专业学生的人数、计算每位学生的平均分等,也可以定义新的字段来保存计算的结果。 4. 数据更新 使用查询可对数据表中的记录进行更新,实现对数据表进行追加、更新、删除等操作。 5. 建立表 建立表是指利用查询产生的结果形成一个新数据表。 6. 作为其他对象的数据源 查询的运行结果可以作为窗体、报表和数据访问页的数据源,也可以作为其他查询的数据源。 3.1.2查询的类型 按照查询结果是否对数据源产生影响以及查询准则设计方法的不同,可以将查询分为以下5种类型。 1. 选择查询 选择查询是最常用的一种查询类型,它可以从一个或多个表中提取数据。同时还可以使用选择查询来对记录进行分组,并且对记录做统计、计数、求平均值以及其他类型的综合计算。 2. 参数查询 当用户需要的查询每次都要改变查询条件时,可以使用参数查询。参数查询是通过对话框提示用户输入查询条件,系统以该条件作为查询条件,将查询结果按指定的形式显示出来。 3. 交叉表查询 交叉表查询将来源于表或查询中的字段进行分组,一组作为行标题列在数据表的左侧,一组作为列标题列在数据表的顶端,在数据表行与列的交叉处显示表中某个字段的统计值。交叉表查询就是利用表中的行和列来统计数据。 4. 操作查询 操作查询是使用查询的结果对数据表进行的编辑操作。操作查询分为如下4种类型。 (1) 生成表查询。该类型用从一个或多个表中选择的数据建立一个新的表。 (2) 删除查询。该类型从表中选择满足条件的记录,然后将这些记录从原来的表中删除。 (3) 更新查询。该类型对一个或多个表中的一组记录进行更新。 (4) 追加查询。该类型是将一个查询的结果添加到其他表的尾部。 5. SQL查询 SQL查询就是使用SQL语句来创建的一种查询。 在Access 2016中,查询的实现可以通过两种方式进行,一种是在数据库中建立查询对象,另一种是在VBA程序代码中使用SQL。 3.1.3查询视图 Access 2016的每个查询主要有三个视图,即数据表视图、设计视图和SQL视图。其中,数据表视图用于显示查询的结果数据,设计视图用于对查询设计进行创建和编辑,SQL视图用于显示与设计视图等效的SQL语句。 此外,查询还包括数据透视表视图、数据透视图视图。 各种视图可以通过工具栏上“视图”按钮以及下拉列表框中的SQL视图进行相互切换。 3.2使用查询向导创建查询 在Access 2016中建立查询一般可以使用三种方法,分别是使用查询向导创建查询、使用设计视图创建查询和在SQL窗口中创建查询。 Access提供了多种向导以方便查询的创建,对于初学者来说,选择使用向导的帮助可以快捷地建立所需要的查询。用户常用的查询向导有简单查询向导、交叉表查询向导、查找重复项查询向导和查找不匹配项查询向导。 3.2.1简单查询向导 利用简单查询向导创建的查询可以从数据源中指定若干字段进行输出,但不能通过设置条件来限制检索的记录。 例3.1为“课程”表创建名为“课程基本情况”的查询,查询结果中包括“课程号”“课程名称”“学分”三个字段。 操作步骤如下。 (1) 在Access中打开“教学管理系统”数据库。 (2) 选择“创建”选项卡中的“查询”组。 (3) 单击“查询向导”按钮,弹出“新建查询”对话框,如图3.1所示。 图3.1“新建查询”对话框 (4) 在“新建查询”对话框右侧选择“简单查询向导”选项,单击“确定”按钮,弹出“简单查询向导”对话框之一,如图3.2所示。 图3.2“简单查询向导”对话框之一 (5) 单击“表/查询”下拉列表框右侧的向下箭头,从弹出的列表框中选定“表: 课程”,这时“课程”表中的所有字段显示在可用字段文本框中。 (6) 选择查询中要使用的字段。双击“课程号”字段,该字段将被添加到右侧“选定字段”列表框中。在选择字段时,用户也可以先单击该字段,然后再单击“>”按钮。 用同样的方法将“课程名称”“学分”字段添加到“选定字段”列表框中,如图3.3所示。 图3.3“简单查询向导”对话框之二 如果要选择所有的字段,可直接单击“>>”按钮一次完成; 要取消已选择的字段,可以利用“<”和“<<”按钮进行。 单击“下一步”按钮,进入“简单查询向导”对话框之三,如图3.4所示。 图3.4“简单查询向导”对话框之三 (7) 选中“明细(显示每个记录的每个字段)”单选按钮,单击“下一步”按钮,进入“简单查询向导”对话框之四,如图3.5所示。 图3.5“简单查询向导”对话框之四 (8) 输入查询标题“课程基本情况”,并选中“打开查询查看信息”单选按钮,单击“完成”按钮后,系统将显示新建的简单查询向导查询的结果,如图3.6所示。 图3.6简单查询向导查询的结果 3.2.2查找重复项查询向导 利用“查找重复项”查询的结果,可以确定在表中是否有重复的记录,或记录在表中是否共享相同的值。 例3.2为“学生”表创建名为“男女学生人数”的查询。 操作步骤如下。 (1) 选择“创建”选项卡中的“查询”组。 (2) 单击“查询向导”按钮,弹出“新建查询”对话框,如图3.1所示。 (3) 选择“查找重复项查询向导”选项,单击“确定”按钮,弹出“查找重复项查询向导”对话框之一,如图3.7所示。 图3.7“查找重复项查询向导”对话框之一 (4) 选择用以搜寻重复字段值的表或查询,这里选择“表:学生”表。 (5) 单击“下一步”按钮,在弹出的“查找重复项查询向导”对话框之二中选择可能包含重复信息的字段,这里选择“性别”字段,如图3.8所示。 图3.8“查找重复项查询向导”对话框之二 (6) 单击“下一步”按钮,在弹出的“查找重复项查询向导”对话框之三中,确定查询是否还显示带有重复值的字段之外的其他字段,这里不选择其他字段,如图3.9所示。 图3.9“查找重复项查询向导”对话框之三 (7) 单击“下一步”按钮,弹出“查找重复项查询向导”对话框之四,如图3.10所示。输入查询名称“男女学生人数”,选中“查看结果”单选按钮。单击“完成”按钮,结束查询的创建。 图3.10“查找重复项查询向导”对话框之四 查询结果如图3.11所示,可以看到男女学生人数的查询结果。 图3.11男女学生人数的查询结果 3.2.3查找不匹配项查询向导 使用“查找不匹配项查询向导”可以在一个表中查找其在另一个表中没有相关记录的记录。 例3.3使用“教师”表和“开课教师”表创建“没有开设课程教师”的查询。 操作步骤如下。 (1) 选择“创建”选项卡中的“查询”组。 (2) 单击“查询向导”按钮,弹出“新建查询”对话框,如图3.1所示。 (3) 选择“查找不匹配项查询向导”选项,然后单击“确定”按钮,弹出“查找不匹配项查询向导”对话框之一。 (4) 选择用以搜寻不匹配项的表或查询,这里选择“表:教师”表,如图3.12所示。 图3.12“查找不匹配项查询向导”对话框之一 (5) 单击“下一步”按钮,弹出“查找不匹配项查询向导”对话框之二。选择包含相关记录的表或查询,在这里选择“表:开课教师”表,如图3.13所示。 图3.13“查找不匹配项查询向导”对话框之二 (6) 单击“下一步”按钮,弹出“查找不匹配项查询向导”对话框之三。确定在两张表中都有的匹配的字段,选择“教师编号”字段,然后单击按钮,如图3.14所示。 图3.14“查找不匹配项查询向导”对话框之三 (7) 单击“下一步”按钮,弹出“查找不匹配项查询向导”对话框之四。选择查询结果中所需的字段,这里选择“教师编号”“姓名”“性别”“职称”字段,如图3.15所示。 图3.15“查找不匹配项查询向导”对话框之四 (8) 单击“下一步”按钮,弹出“查找不匹配项查询向导”对话框之五。输入查询名称“没有开设课程的教师”,选中“查看结果”单选按钮,如图3.16所示,单击“完成”按钮。 图3.16“查找不匹配项查询向导”对话框之五 查询结果如图3.17所示,可以看到“没有开设课程的教师”的查询结果。 图3.17没有开设课程的教师的查询结果 3.3查 询 准 则 使用查询向导可以快速地创建一个查询,但实现的功能比较单一。在Access 2016中,除了利用向导创建的查询之外,其他的查询都要指定一定的选择条件,即查询准则。查询准则是用运算符将常量、字段名(变量)、函数连接起来构成的表达式,即查询表达式。 使用查询准则可以使查询结果中仅包含满足相应限制条件的数据记录。 不论什么类型的查询,建立的过程基本是一样的,一般会经过以下几个阶段。 (1) 选择数据源。 (2) 指定查询类型。 (3) 设置查询准则。 (4) 为查询命名。为查询命名时,查询的名称不能与已有的查询重名,也不能与已有的表重名。 3.3.1运算符 在Access 2016的查询表达式中,使用的运算符包括算术运算符、关系运算符、逻辑运算符和特殊运算符。 1. 算术运算符 算术运算符的运算对象为数值,生成表达式的结果仍为数值,如表3.1所示。 表3.1算术运算符 运算符含义示例运算符含义示例 +加—-减— *乘—/除3/2值为1.5 \整除3\2值为1mod求余数7 mod 3值为1 ^乘方3^2值为9——— 2. 关系运算符 关系运算符用来对表达式进行比较,关系成立的表达式的结果为True,否则结果为False,如表3.2所示。 表3.2关系运算符 运算符含义示例运算符含义示例 >大于7>6值为True>=大于或等于"王">="李"值为True <小于"abcd"<"abd" 值为True<=小于或等于#201729#<=#201891# 值为True =等于7=2值为False<>不等于"abc"<>"123"值为True 3. 逻辑运算符 逻辑运算符用来连接两个或多个关系表达式,其结果为逻辑值True,或者False,如表3.3所示。 表3.3逻辑运算符 运算符形式说明 NotNot <表达式>当Not连接的表达式为真时,整个表达式为假 And <表达式1> And <表达式2>当And连接的表达式都为真时,整个表达式为真,否则为假 Or <表达式1> Or <表达式2>当Or连接的表达式有一个为真时,整个表达式为真,否则为假 例如: 查找不及格或90分以上的成绩,表达式为<=60 OR >=90。 查找会计专业的女学生,表达式为[专业]="会计" AND [性别]="女"。 查找除高等数学之外的课程,表达式为NOT "高等数学"。 4. 其他的特殊运算符 除了上面几类运算符外,在Access的查询准则中,还常用到以下几个特殊的运算符。 (1) In。该运算符右边的括号中指定一系列满足条件的值。 例如,In("张三"," 李四","王五")表示查询的姓名为括号内的3个姓名之一。它与表达式: "张三" or " 李四" or "王五"效果是一样的。 注意: 表达式中的分隔符应该是英文半角符号。 (2) Between A and B。该运算符用于指定A到B的范围。A和B可以是数字型、日期型和文本型数据,而且A和B的类型相同。 例如,Between 80 and 90用来查找成绩为80~90分的学生,它和表达式>=80 and <=90的结果是一样的。 (3) 与空值有关的运算符。与空值有关的运算符有Is Null(用于指定一个字段为空)和Is Not Null(用于指定一个字段为非空)两个。 例如,如果“出生日期”字段的准则行输入Is Null,表示查找该字段值为空的记录。如果输入Is Not Null表示查找该字段值为非空的记录。要查找“姓名”字段的值为非空的记录,表达式为“姓名Is Not Null”。 (4) Like。该运算符由于要在文本字段中指定查找模式,它通常和以下的通配符配合使用。 ① ?: 表示该位置可以匹配任何一个字符。 ② *: 表示该位置可匹配零个或多个字符。 ③ #: 表示该位置可匹配一个数字。 ④ [ ]: 在方括号内描述可匹配的字符范围。 例3.4Like的用法示例。 Like "张*"查找姓张的同学 Like "张?"查找姓张的同学,且姓名只有两个字 Like "[1-5]?" 查找的字符串中第一位是1~5的数字,第二位是任意字符 Like "*冰箱"查找各种品牌的冰箱 Like "*乳*" 查找各种生产乳制品的厂家 Like "表#" 查找"表1""表2"等,但不能查找"表A" (5) &或者+: 该运算符将实现两个字符串的连接。 例如,表达式"How " & "are you!"的结果是"How are you!",表达式"123" + "123"结果为"123123"。 3.3.2函数 Access提供了大量的标准函数,如数值函数、字符函数、日期/时间函数和统计函数等。利用这些函数可以更好地构造查询准则,也为用户更准确地进行统计计算、实现数据处理提供了有效的方法。表3.4~表3.7分别给出了4种类型函数的说明。 1. 数值函数 表3.4数值函数 函数说明 Abs(数值表达式)返回数值表达式值的绝对值 Sqr(数值表达式)返回数值表达式值的算术平方根 Sgn(数值表达式)返回数值表达式值的符号值,当表达式的值为正、负和零时,函数值分别为1、-1和0 Fix(数值表达式)返回数值表达式值的整数部分,去掉小数部分 Int(数值表达式)返回不大于数值表达式值的最大整数 Rnd(数值表达式)返回一个0~1的随机数 Round(数值表达式,n)对数值表达式求值并四舍五入保留n位小数 2. 字符函数 表3.5字符函数 函数说明 Space(n)返回由n个空格组成的字符串 String(n,字符表达式)返回“字符表达式”的第一个字符组成的字符串,字符个数是n个 Left(字符表达式,n)从字符表达式左边第一个字符开始截取n个字符 Right(字符表达式,n)从字符表达式右边第一个字符开始截取n个字符 Mid(字符表达式,n1[,n2])从字符表达式左边第n1位置开始,截取连续n2个字符; 省略n2,则从n1位置开始截取以后的所有字符串 Len(字符表达式)返回字符串的长度 Ltrim(字符表达式)去掉字符表达式前导空格后的字符串 Rtrim(字符表达式)去掉字符表达式尾部空格后的字符串 Trim(字符表达式)去掉字符表达式前导和尾部空格后的字符串 Asc(字符表达式)返回字符表达式首字符的ASCII码值 Chr(字符的ASCII码值)将ASCII码值转换为字符 InStr(字符表达式1,字符表达式2)返回字符表达式2在字符表达式1中的位置 Ucase(字符表达式)将字符串中的小写字母转换为大写字母 Lcase(字符表达式)将字符串中的大写字母转换为小写字母 注意: 参数n1、n2都是数值表达式,字符函数用于对字符串进行处理,在Access的字符串中,一个汉字也作为一个字符处理。 例3.5字符函数的用法。 String(4,"a" ) 结果是: aaaa Left("计算机等级考试",3) 结果是: 计算机 Right("计算机等级考试",2) 结果是: 考试 Mid("计算机等级考试",4,2) 结果是: 等级 Len("计算机等级考试") 结果是: 7 Len([姓名])=2查询姓名为两个字的记录 Asc("A")结果是: 65 Chr(65)结果是: A InStr("计算机abc","a")结果是: 4 InStr("计算机abc","d")结果是: 0 3. 日期/时间函数 表3.6日期/时间函数 续表 函数说明 Now()返回系统当前的日期时间 Date()返回系统当前日期 Time()返回系统当前的时间 Year(日期)返回日期中的年份,范围为100~9999 Month(日期)返回日期中的月份,范围为1~12 Day(日期)返回日期中的日,范围为1~31 Weekday(日期)返回日期中的星期,从星期日到星期六的值分别是1~7 Hour(日期)返回时间中的小时,范围为1~23 Minute(日期)返回时间中的分钟 Second(日期)返回时间中的秒 DateSerial(year,month,day) 返回指定的日期 例3.6日期/时间函数的用法。 Between #2001-1-1# and #2001-12-31# 或Year([出生日期])=2001查询2001年出生的记录 <Date()-30查询30天前的记录 Month([出生日期])=Month(date()) 查询本月出生的记录 Year([出生日期])=2001 And Month([出生日期])=11查询2001年11月出生的记录 Month([出生日期])>=3 And Month([出生日期])<=6查询3月至6月出生的记录 DateSerial(Year(Now()),1,1)查询系统当前年的1月1日 DateSerial(Year(Date())+1,9,1)查询系统下一年的9月1日 4. 统计函数 表3.7统计函数 函数说明 Sum(字符表达式)返回字符表达式中值的总和。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字类型的字段 Avg(字符表达式)返回字符表达式中值的平均值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字类型的字段 Count(字符表达式)返回字符表达式中值的个数。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字类型的字段 Max(字符表达式)返回字符表达式的最大值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字类型的字段 Min(字符表达式)返回字符表达式的最小值。字符表达式可以是一个字段名,也可以是一个含字段名的表达式,但所含字段应该是数字类型的字段 3.4使用设计视图建立查询 在Access 2016中,查询主要有三种视图: 设计视图、数据表视图和SQL视图。使用“设计视图”不仅可以设计比较复杂的查询,还可以对一个已有的查询进行编辑和修改。 在查询“设计视图”中会出现“设计”选项卡,如图3.18所示。 图3.18“查询工具”的“设计”选项卡 3.4.1选择查询 选择查询是Access中最常用的一种查询。选择查询能自由地从一个或多个表或查询中抽取相关的字段和记录进行分析和处理。 1. 单表查询 例3.7在“学生”表中查询获得奖励的女生的信息。 操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框,如图3.19所示。 图3.19“显示表”对话框 (3) 在“表”选项卡中,双击“学生”表,将其添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 “设计视图”是一个设计查询的窗口,包含了创建查询所需要的各个组件。用户只需在各个组件中设置一定的内容就可以创建一个查询。查询“设计视图”窗口上部为表/查询的字段列表,显示添加到查询中的数据表或查询的字段列表; 下部为查询设计区,定义查询的字段,并将表达式作为条件,限制查询的结果; 中间是可以调节的分隔线; 标题栏包括了查询名称和查询类型。用户只需要在各个组件中设置一定的内容就可以创建一个查询。 在查询设计区中,可以详细设置查询的内容,具体内容的功能如下。 字段: 查询所需要的字段。每个查询至少包括一个字段,也可以包含多个字段。如果与字段对应的“显示”复选框被选中,则表示该字段将显示在查询的结果中。 表: 指定查询的数据来源表或其他查询。 排序: 指定查询的结果是否进行排序。排序方式包括“升序”“降序”“不排序”三种。 条件: 指定用于查询的条件或要求。 (4) 在查询“设计视图”窗口的上半部分,分别双击“学生”表中的“学号”“姓名”“性别”“奖励否”字段,在“性别”字段对应的条件行中输入条件"女",在“奖励否”字段对应的条件行中输入条件True,如图3.20所示。 图3.20查询获得奖励的女生的设计视图 (5) 单击功能区上“视图”按钮右侧的向下箭头,在弹出的下拉列表中选择“数据表视图”命令,预览查询的结果,如图3.21所示。 (6) 单击快速访问工具栏上的“保存”按钮,弹出“另存为”对话框,如图3.22所示,在此对话框中输入查询名称“获得奖励的女生”,然后单击“确定”按钮,完成查询的建立。 图3.21查询获得奖励的女生的数据表视图 图3.22“另存为”对话框 2. 多表查询 如果当前的查询中包含了多个表,需要在表与表之间建立连接,否则设计完成的查询将按完全连接生成查询结果。在添加表或查询时,如果所添加的表或查询之间已经建立了关系,则在添加表或查询的同时也添加新的连接。 要建立表或查询间的连接,可以在查询“设计视图”中从表或查询的字段列表中将一个字段拖到另一个表或查询字段列表的相同字段上,即具有相同或兼容的数据类型且包含相似数据的字段。用这种方式进行连接,只有当连接字段的值相等时,Access才从两个表或查询中选取记录。 例3.8查询学生的考试成绩,并按“学号”升序排序。本例的数据源是三个表,这三个表之间已经建立了关系。 操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 双击“学生”表、“成绩”表和“课程”表,将三个表添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 单击查询设计区中字段的空白格处,会弹出一个下拉按钮,单击该按钮即可弹出下拉列表框,其中列出了所有已经被选择的表或查询包含的所有字段。 选择“学生”表的“学号”“姓名”字段,“课程”表的“课程名称”字段,“成绩”表的“成绩”字段,如图3.23所示。 图3.23多表查询 (5) 在“学号”字段对应的排序行中选择“升序”。 (6) 单击功能区上的“运行”按钮后将显示查询的结果,如图3.24所示。关闭查询“设计视图”窗口或单击快速访问工具栏上的“保存”按钮,弹出“另存为”对话框,在“查询名称”文本框中输入查询名称“学生的考试成绩”,完成查询的建立。 图3.24多表查询结果 3. 从查询中删除表或查询 如果当前查询中的某个表或查询已经不再需要,可以将其从查询中删除。 操作步骤如下。 (1) 在查询“设计视图”窗口中打开查询。 (2) 在查询“设计视图”窗口上部单击要删除的表或查询,按Delete键,完成删除; 或者在选中表的标题栏上右击,在弹出的快捷菜单中选择“删除表”命令即可。 4. 在设计视图中操作字段 (1) 添加字段。双击“设计视图”窗口上部字段列表中的字段名,或者在查询设计区中从字段的下拉列表框中进行选择。 (2) 删除字段。在查询设计区中,单击列选定器选定该列,然后按Delete键。 (3) 移动查询设计区中的字段。单击相应字段的列选定器,然后将其拖动到目标位置。用户也可以在需要移动列的列选定器上右击,在弹出的快捷菜单中选择“剪切”命令,然后在目标位置上右击,在弹出的快捷菜单中选择“粘贴”命令即可。 (4) 在查询中更改字段名。将查询的源表或查询的字段拖放到查询设计区中后,查询自动将源表或查询的字段作为查询结果中要显示的字段名。但是为了更准确地说明字段中的数据,可以改变这些字段的名称。在查询设计区中更改字段名,将仅改变查询“数据表”视图中的标题,源表的字段名不会改变。 (5) 使用星号“*”。如果某个表中所有的字段都包含在查询中,可以分别选择每个字段,也可以使用星号“*”通配符选择。 3.4.2自定义计算查询 Access 2016的查询不仅具有记录检索的功能,而且还具有计算的功能。在Access查询中可执行许多类型的计算。例如,可以计算一个字段值的总和或平均值,使两个字段值相乘,或者计算从当前日期算起3个月后的日期。 1. 预定义计算查询 预定义计算,即“总计”计算,用于对查询中的记录组和全部记录进行总和、平均值、计数、最小值、最大值、标准偏差和方差等数量计算,也可根据查询要求选择相应的分组、第一条记录、最后一条记录、表达式、条件等。 例3.9统计“学生”表中不同性别的学生人数。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 在“表”选项卡中双击“学生”表,将其添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 在查询“设计视图”窗口的上半部分,双击“性别”和“学号”两个字段,将它们添加到查询设计区中。 图3.25分组记录 (5) 单击“显示/隐藏”组中的“汇总”按钮,此时“设计视图”窗口的下半部分多了一个“总计”行,自动设置对应“总计”行的内容为Group By。 在“学号”对应的“总计”行中,单击右侧的向下箭头,在打开的列表框中显示了统计函数和总计项,单击列表框中的计数项“计数”,如图3.25所示。 (6) 单击快速访问工具栏上的“保存”按钮,打开“另存为”对话框,在此对话框中输入查询名称“统计不同性别的学生人数”,然后单击“确定”按钮,查询建立完毕。 (7) 单击功能区上的“运行”按钮,将显示查询的结果,如图3.26所示。 图3.26不同性别学生人数的查询结果 2. 创建计算字段 如果用户想对一个或多个字段中的数据进行数值、日期和文本计算,需要直接在“设计网格”中创建计算字段。计算字段是在查询中定义的字段,用于显示表达式的结果而非显示存储的数据。因此,当表达式中的值改变时将重新计算该字段的值。 创建计算字段的方法是在查询的“设计视图”的设计区“字段”行中直接输入计算字段及其计算表达式。输入规则是“计算字段名:表达式”,其中计算字段名和表达式之间的分隔符是半角的(:)。 使用函数可以完成一些复杂的功能或特殊运算,为用户更准确地进行统计计算、实现数据处理提供了有效的方法。 例3.10计算“学生”表中学生的年龄,结果中显示“姓名”“年龄”,其中“年龄”为计算字段,根据系统当前日期和每个人的“出生日期”计算得到。 操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 在“表”选项卡中双击“学生”表,将其添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 在查询“设计视图”窗口的上半部分双击“姓名”字段,将它们添加到“设计网格”中,并在“设计网格”中第二列“字段”行输入: 年龄:Year(Date())Year([出生日期]),如图3.27所示。 (5) 单击快速访问工具栏上的“保存”按钮,输入查询名称“年龄查询”,然后单击功能区上的“运行”按钮运行查询,查询结果如图3.28所示。 图3.27创建计算字段 图3.28年龄查询的结果 为了帮助用户在查询设计区中正确地书写表达式,Access 2016提供了“表达式生成器”。使用“表达式生成器”创建表达式的操作步骤如下。 (1) 在查询的“设计视图”中,单击要输入条件的单元格,选择“设计”选项卡上“查询设置”组中的命令,打开“表达式生成器”对话框。 (2) 选择需要的对象、函数、运算符,完成表达式的输入。“表达式生成器”提供了数据库中所有对象中的各种控件,以及系统提供的函数、常量、操作符和通用表达式。将它们进行合理搭配,单击相关的按钮,就可以书写任意一种表达式,如图3.29所示。 图3.29表达式生成器 若要在较大的区域中编辑表达式,可将光标放在“条件”单元格中,然后按 Shift+F2 组合键来显示“缩放”框。 (3) 单击“确定”按钮,退出“表达式生成器”对话框,表达式将会自动复制到启动“表达式生成器”的位置。 例3.11在例3.8建立的“学生的考试成绩”的基础上,增加一列来查询学生的考试等级。考试成绩在90分以上为“优秀”,60分以下为“不合格”,其他的等级为“合格”。 函数: IIf([成绩]>=90,"优秀",IIf([成绩]>=60,"合格","不合格")) 操作步骤如下。 (1) 在“查询”对象中右击“学生的考试成绩”查询,在弹出的快捷菜单中选择“设计视图”命令,打开查询。 (2) 选择新列,在“字段”栏中输入: 考试等级:IIf([成绩]>=90,"优秀",IIf([成绩]>=60,"合格","不合格")) IIf()函数的使用如图3.30所示。 图3.30IIf()函数的使用 (3) 选择“文件”菜单下的“另存为”命令,在弹出的对话框中输入查询名称“查询考试等级”,然后单击功能区上的“运行”按钮执行查询,查询结果如图3.31所示。 图3.31学生考试等级的查询结果 例3.12以“学生”表为数据源,创建一个选择查询,统计出共有多少位会计专业的学生。 操作步骤如下。 (1) 在“教学管理系统”数据库中,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 在“表”选项卡中双击“学生”表,将其添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 在“设计网格”中第一列“字段”行输入: 会计专业学生人数: Count(*),在第二列选择“专业”字段,设置查询条件为"会计",取消“显示”行中的“√”,查询结果中不显示“专业”字段,如图3.32所示。 (5) 保存查询,名称为“统计会计专业学生人数”。单击功能区上的“运行”按钮运行查询。 3. 控制查询中显示的记录数 可以在查询的数据表中只显示字段值在某个上限或下限之间的记录,或者只显示总记录中最大或者最小百分比数量的记录。 例3.13在例3.8建立的“学生的考试成绩”的基础上,查询考试成绩为前5%的学生信息。 操作步骤如下。 (1) 在“查询”对象中右击“学生的考试成绩”查询,在弹出的快捷菜单中选择“设计视图”命令,打开查询。 (2) 设置“成绩”字段按“降序”排序,如图3.33所示。 图3.32统计会计专业学生人数 图3.33成绩字段按降序排序 (3) 单击“设计”选项卡上“查询设置”组中的“返回”下拉列表框,选择或输入希望在查询结果中显示的上限值或者下限值的数目或者百分比。在此输入5%,如图3.34所示。 (4) 选择“文件”菜单下的“另存为”命令,输入查询名称“考试成绩为前5%的信息”,然后单击功能区上的“运行”按钮执行查询,查询结果如图3.35所示。 图3.34“返回”数据框 图3.35考试成绩为前5%的学生信息的查询结果 3.4.3交叉表查询 交叉表查询以水平方式和垂直方式对记录进行分组,并计算和重构数据,可以简化数据分析。交叉表查询可以计算数据总和、计数、平均值或完成其他类型的综合计算。 使用向导创建交叉表查询,可以在一个数据表中以行标题将数据组成群组,按列标题分别求得所需汇总的数据,然后在数据表中以表格的形式显示出来。 例如,要查询每位学生每门课程的考试成绩,由于每位学生修了多门课程,如果使用选择查询,在“课程名”字段中将出现重复的课程名称,这样显示出来的数据很凌乱。为了使查询的结果能够满足实际需要,使查询后生成的数据显示得更清晰、准确,结构更紧凑、合理,Access 2016提供了一个很好的查询方式,即交叉表查询。 在创建交叉表查询时,用户需要指定如下三种字段。 (1) 放在查询表最左端的分组字段构成行标题。 (2) 放在查询表最上面的分组字段构成列标题。 (3) 放在行与列交叉位置上的字段用于计算。 其中,后两种字段只能有一个,第一种字段(即放在最左端的字段)最多可以有三个。这样,交叉表查询就可以使用两个以上分组字段进行分组总计。 1. 使用查询向导创建交叉表查询 例3.14在例3.8建立的“学生的考试成绩”的基础上,建立学生的考试成绩交叉表查询。 操作步骤如下。 (1) 在Access中打开“教学管理系统”数据库。选择“创建”选项卡中的“查询”组。 (2) 单击“查询向导”按钮,弹出“新建查询”对话框。 (3) 选择“交叉表查询向导”选项,然后单击“确定”按钮,弹出“交叉表查询向导”对话框之一,如图3.36所示。选中“视图”区的“查询”单选按钮,在查询列表框中选择“查询:学生的考试成绩”。 注意: 创建交叉表的数据源必须来自一个表或查询,如果数据源来自多个表,可以先建立一个查询,然后再以此查询作为数据源。 图3.36“交叉表查询向导”对话框之一 (4) 单击“下一步”按钮,进入“交叉表查询向导”对话框之二,如图3.37所示。双击“可用字段”中的“学号”“姓名”,使其成为选定字段,以设置这两个字段为行标题。 图3.37“交叉表查询向导”对话框之二 (5) 单击“下一步”按钮,进入“交叉表查询向导”对话框之三,如图3.38所示。选择“课程名称”作为列标题,单击“下一步”按钮,进入“交叉表查询向导”对话框之四,如图3.39所示。 图3.38“交叉表查询向导”对话框之三 图3.39“交叉表查询向导”对话框之四 (6) 选择“成绩”字段,在“函数”列表框中选择“第一”,并取消选中“是,包括各行小计”复选框,然后单击“下一步”按钮,在弹出的对话框中输入查询名称“学生的考试成绩_交叉表”,最后单击“完成”按钮,完成操作。查询结果如图3.40所示。 图3.40学生的考试成绩的交叉表查询结果 2. 使用设计视图创建交叉表查询 例3.15在例3.8建立的“学生的考试成绩”的基础上,用设计视图建立学生的考试成绩交叉表查询。操作步骤如下。 (1) 在设计视图中打开“学生的考试成绩”查询。 (2) 分别双击“学号”“姓名”“课程名称”“成绩”字段。 (3) 单击“设计”选项卡中“查询类型”组中的“交叉表”命令,在查询“设计视图”窗口的下半部分自动多了“总计”行和“交叉表”行,如图3.41所示。 图3.41交叉表设计视图 单击“学号”和“姓名”字段的交叉表行右侧的向下箭头,在打开的列表框中选择“行标题”; 在“课程名称”字段的交叉表行选择“列标题”; 在“成绩”字段的交叉表行选择“值”,然后在“总计”行中选择First。 (4) 保存查询,将其命名为“学生的考试成绩交叉表”。 3.4.4参数查询 前面所建立的查询,无论是内容还是条件都是固定的,如果用户希望根据不同的条件来查找记录,就需要不断建立查询,这样做很麻烦。为了方便用户的查询,Access提供了参数查询。参数查询是动态的,它利用对话框提示用户输入参数并检索符合所输入参数的记录或值。 根据查询中参数的数量的不同,参数查询可以分为单参数查询和多参数查询两类。 1. 单参数查询 例3.16创建单参数查询,根据用户输入的教师编号查询教师的相关信息。运行查询时,显示提示信息“请输入教师编号:”。 操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 在“显示表”对话框中单击“表”选项卡,在该选项卡中双击“教师”表,将表添加到查询“设计视图”窗口中,最后单击“关闭”按钮,关闭该对话框。 (4) 在查询“设计视图”窗口的上半部分,将全部字段添加到设计网格的“字段”行。 (5) 在“教师编号”字段列的“条件”区域输入“[请输入教师编号: ]”,如图3.42所示。 注意: 在Access中创建参数查询就是在创建查询时,在查询条件区域中输入用方括号([])括起来的提示信息。 (6) 切换到查询数据表视图,弹出“输入参数值”对话框,如图3.43所示。在“请输入教师编号: ”文本框中输入教师编号01004,单击“确定”按钮,显示的查询结果如图3.44所示。 图3.42单参数查询 图3.43“输入参数值”对话框 图3.44单参数查询结果 (7) 单击“文件”菜单中“保存”命令,输入文件名“单参数查询”,最后单击“确定”按钮完成操作。 2. 多参数查询 例3.17创建多参数查询。根据用户输入的成绩区间,查询满足条件的学生成绩信息。操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 双击“学生”表、“成绩”表和“课程”表,将三个表添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 选择查询“学生”表的“学号”“姓名”字段,“课程”表的“课程名称”字段,“成绩”表的“成绩”字段添加到设计网格的“字段”行上。 (5) 在“成绩”字段列的“条件”区域输入“Between [最低分] And [最高分]”,如图3.45所示。 图3.45例3.17的多参数查询的“条件”设置 (6) 保存查询。将其命名为“多参数查询”。 (7) 运行查询。屏幕上会显示第一个“输入参数值”对话框,向“最低分”文本框中输入最低分80,如图3.46(a)所示。 (8) 单击“确定”按钮,这时屏幕上出现第二个“输入参数值”对话框,向“最高分”文本框中输入最高分90,如图3.46(b)所示。 图3.46例3.17的“输入参数值”对话框 (9) 单击“确定”按钮,就可以看到相应的查询结果了,如图3.47所示。 图3.47例3.17的多参数查询结果 例3.18修改例3.17创建的多参数查询。根据用户输入的学号和课程名称,查询满足条件的学生成绩信息。 操作步骤如下。 (1) 在“设计视图”方式下打开例3.17所建立的“多参数查询”。 (2) 在“学号”对应的“条件”行中输入“[请输入学生学号: ]”,在“课程名称”对应的“条件”行中输入“[请输入课程名称: ]”,并删除“成绩”对应的“条件”行的内容,如图3.48所示。 图3.48例3.18的多参数查询的条件“设置” (3) 单击“文件”菜单下的“另存为”命令,保存查询为“多参数查询1”。 (4) 运行查询。在第一个“输入参数值”对话框中输入学号20020002,单击“确定”按钮,如图3.49(a)所示。在第二个“输入参数值”对话框中输入课程名称“高等数学”,单击“确定”按钮,如图3.49(b)所示。 图3.49例3.18的“输入参数值”对话框 (5) 单击“确定”按钮,就可以看到相应的查询结果了,如图3.50所示。 图3.50例3.18的多参数查询结果 从例3.18可以看出,建立参数查询实际上就是在“条件”行输入了提示信息,如果在其他字段的“条件”行也输入类似的提示信息,就可以实现多参数查询。在运行一个多参数的查询时,要依次输入多个参数的值。 3.5操作表查询 3.4节介绍的几种查询方法,都是根据特定的查询准则,从数据源中提取符合条件的动态数据集,但对数据源的内容并不进行任何改动。操作查询是指只在一个操作中更改许多记录的查询,它是Access提供的5种查询中的一个非常重要的查询,可以在检索数据、计算数据和显示数据的同时更新数据,而且还可以生成新的数据表。 图3.514种类型的操作查询 Access中包括4种类型的操作查询,如图3.51所示。“生成表”查询可以创建新表; “追加”查询可以实现在现有表中添加新记录; “更新”查询可以成批替换现有数据; “删除”查询可以实现从现有表中成批删除记录。 由于操作查询将改变数据表的内容,因此系统设置这部分内容是被禁止的,在创建操作查询之前,需要启用相关内容。单击窗口黄色安全警告右侧的“启用内容”按钮,使操作查询可以使用,如图3.52所示。 图3.52安全警告 由于操作查询将改变数据表的内容,并且这种改变是不可以恢复的,所以某些错误的操作查询可能会造成数据表中数据的丢失。因此,用户在进行操作查询之前,应该先对数据表进行备份。 创建表的备份的具体操作步骤如下。 (1) 单击导航窗格中的表,单击“开始”选项卡中的“复制”按钮,或按Ctrl+C组合键。 (2) 单击“开始”选项卡中的“粘贴”按钮,或按Ctrl+V组合键,弹出“粘贴表方式”对话框,如图3.53所示。 图3.53“粘贴表方式”对话框 (3) 在“表名称”文本框中为备份的表指定新表名。 (4) 选中“结构和数据”单选按钮,然后单击“确定”按钮,将新表添加到导航窗格中。用户可以看到,此备份的表和原表完全相同。 3.5.1生成表查询 生成表查询是将查询的结果保存到一个表中,这个表可以是一个新表,也可以是已存在的表; 但如果将查询结果保存在已有的表中,则该表中原有的内容将被删除。 例3.19创建生成表查询。将“教学管理系统”数据库中不及格的学生记录保存到新的表中。要求显示“学号”“姓名”“专业”“课程名称”“成绩”5个字段。 操作步骤如下。 (1) 打开“教学管理系统”数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 双击“学生”表、“成绩”表和“课程”表,将3个表添加到查询“设计视图”窗口中,单击“关闭”按钮,关闭“显示表”对话框。 (4) 将“学生”表的“学号”“姓名”“专业”字段,“课程”表的“课程名称”字段,“成绩”表的“成绩”字段添加到设计网格的“字段”行上。 (5) 在“成绩”字段列的“条件”区域输入“<60”,如图3.54所示。 图3.54查询不及格的学生记录的“条件”设置 (6) 单击“设计”选项卡“查询类型”选项组中的“生成表”命令,弹出“生成表”对话框。在“表名称”组合框中输入新表名“不及格学生记录”,如图3.55所示。然后单击“确定”按钮,返回查询“设计视图”窗口。 图3.55“生成表”对话框 (7) 保存查询为“不及格学生记录”,查询建立完毕。 (8) 在“数据表视图”中预览查询结果,如图3.56所示。 图3.56预览查询结果 (9) 返回设计视图,单击功能区上的“运行”按钮,弹出生成表消息框,如图3.57所示。单击“是”按钮,确认生成表操作。在数据库窗口中单击表对象后,可以看到多了一个名为“不及格学生记录”的表。 图3.57生成表消息框 在前面各节的例子中,预览查询和执行查询的结果是一样的。从本例可以看出,对于操作查询,这两个操作是不同的。在“数据表视图”中预览,只是显示满足条件的记录,而执行查询,则是对查找到的记录继续进行添加、删除、修改等操作。也就是说,对于这类查询首先应该是进行查询,然后对查询到的记录进行操作,这就是操作查询。 3.5.2删除查询 如果需要从数据库的某个数据表中有规律地成批删除一些记录,可以使用删除查询来解决。应用删除查询对象成批地删除数据表中的记录,应该指定相应的删除条件,否则就会删除数据表中的全部数据。 如果要从多个表中删除相关记录,必须同时满足以下条件: 已经定义了表间的相互关系; 在“编辑关系”对话框中已选中“实施参照完整性”复选项; 在“编辑关系”对话框中已选中“级联删除相关记录”复选项。 例3.20创建删除查询,删除“学生”表中会计专业的学生记录。由于删除查询要直接删除原来数据表中的记录,为保险起见,本例中建立删除查询之前先将学生表进行备份,指定备份表名为“学生”备份,删除操作只对“学生备份”表进行。 图3.58创建删除查询 操作步骤如下。 (1) 在设计视图中创建查询,选定“学生备份”表作为数据源。 (2) 分别双击“学生备份”表中的“学号”“姓名”“专业”字段。 (3) 在“专业”字段的“条件”行输入: "会计"。 (4) 单击“设计”选项卡“查询类型”选项组中的“删除”命令,在查询“设计视图”窗口的下半部分多了一“删除”行取代了原来的“显示”和“排序”行,如图3.58所示。 (5) 保存查询为“删除会计专业学生”,查询建立完毕。 (6) 在“数据表视图”中预览查询结果。 (7) 在设计视图中,单击功能区上的“运行”按钮,弹出删除消息框,如图3.59所示,确定要删除记录时单击“是”按钮,在“数据表视图”中打开“学生备份”表会发现删除后的结果; 放弃删除记录时单击“否”按钮。 图3.59删除消息框 从本例可以看出,删除查询将永久地、不可逆地从指定的表中删除记录。因此,在删除之前一定要慎重对待,即先预览后执行,或将要删除记录的表做好备份。另外,删除查询是删除整条记录,而不是删除指定字段中的数据。 3.5.3更新查询 更新查询可以对一个或多个表中的一组记录做批量更改。 例3.21创建更新查询。将姓“王”学生的高等数学成绩增加5分。 操作步骤如下。 (1) 在“设计视图”中创建查询,添加“学生”“成绩”“课程”表作为数据源。 (2) 分别双击“学生”表的“学号”“姓名”字段,“课程”表的“课程名称”字段,“成绩”表的“成绩”字段。 (3) 在“姓名”字段的“条件”行输入: Like "王*"。在“课程名称”字段的“条件”行输入: 高等数学。 (4) 单击“设计”选项卡“查询类型”组中的“更新”按钮,在查询“设计视图”窗口的下半部分便多了一行“更新到”取代了原来的“显示”和“排序”行。在“成绩”字段的“更新到”单元格中,输入用来更改这个字段的表达式: [成绩]+5,如图3.60所示。 图3.60创建更新查询 (5) 保存查询为“更改高等数学成绩”,查询建立完毕。 (6) 若要查看将要更新的记录列表,可在“数据表视图”中预览查询结果,此列表并不显示新值。 (7) 运行查询。弹出如图3.61所示的更新消息框,单击“是”按钮更新数据。此时,打开“成绩”表,可以看出数据已被更新。 图3.61更新消息框 3.5.4追加查询 追加查询是从外部数据源中导入数据,然后将它们追加到现有表中,也可以从其他的Access数据库甚至同一数据库的其他表中导入数据。与选择查询和更新查询类似,追加查询的范围也可以利用条件加以限制。 例3.22创建追加查询。将“学生”表中的会计专业学生记录追加到一个结构类似、内容为空的表中。 操作步骤如下。 (1) 创建“学生”表结构的副本。右击导航窗格中的“学生”表,在弹出的快捷菜单中选择“复制”命令。右击导航窗格中的空白处,在弹出的快捷菜单中选择“粘贴”命令。 由于只需要复制表的结构,不需要复制表中的数据,所以在“粘贴表方式”对话框的“粘贴选项”中选中“仅结构”单选按钮,将副本命名为“会计专业学生”,如图3.62所示。 (2) 在“设计视图”中创建查询,添加“学生”表作为数据源。 (3) 分别双击“学生”表中的“*”(星号)和“专业”字段。 (4) 在“专业”字段的“条件”行输入"会计",如图3.63所示。 图3.62“粘贴表方式”对话框 图3.63创建追加查询的“条件”设置 (5) 单击“设计”选项卡“查询类型”组中的“追加”按钮,弹出“追加”对话框。单击“表名称”右侧的向下箭头,在打开的列表框选中选择“会计专业学生”表,如图3.64所示。然后单击“确定”按钮。 图3.64“追加”对话框 (6) 回到“设计视图”,删除“专业”字段下“追加到”行中的内容,如图3.65所示。 (7) 保存查询为“追加会计专业学生”,查询建立完毕。 (8) 在“数据表视图”中可预览要追加到“会计专业学生”表中的记录。 (9) 运行查询,弹出如图3.66所示追加查询消息框,单击“是”按钮追加数据。 (10) 打开“会计专业学生”表,此时便可以看出记录已被加在了该表中。 图3.65追加查询的设计视图 图3.66追加查询消息框 3.6SQL查询 在Access中,有些查询用各种查询向导和设计器都无法做出来,此时只能使用SQL查询才可以完成。SQL语言作为一种通用的数据库操作语言,并不是Access用户必须要掌握的,但实际工作中有时必须用到这种语言才能完成一些复杂的查询工作。 结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,当今所有关系数据库管理系统都是以SQL为核心的。SOL概念的建立起始于1974年,随着SQL的发展,ISO、ANSI等国际权威标准化组织都为其制定了标准,从而建立了SQL在数据库领域里的核心地位。 SQL语言充分体现了关系数据语言的优点,其主要特点如下。 (1) SQL类似于英语自然语言,简单易学。 (2) SQL是一种非过程语言。 (3) SQL是一种面向集合的语言。 (4) SQL既可独立使用,又可嵌入宿主语言中使用。 (5) SQL具有查询、操纵、定义和控制一体化功能。 SQL语言具有以下功能。 (1) 数据定义。数据定义用于定义和修改表、定义视图和索引。数据定义语句包括CREATE(建立)、DROP(删除)、ALTER(修改)。 (2) 数据操纵。数据操纵用于对表或视图的数据进行添加、删除和修改等操作。数据操纵语句包括INSERT(插入)、DELETE(删除)、UPDATE(修改)。 (3) 数据查询。数据查询用于检索数据库中的数据。数据查询语句包括SELECT(选择)。 (4) 数据控制。数据查询用于控制用户对数据库的存取权利。数据控制语句包括GRANT(授权)、REVOTE(收回权限)。 SQL语言有如下两种使用方式。 (1) 联机交互方式。在数据库管理系统提供的命令窗口中输入SQL命令,交互地进行数据库操作。 (2) 嵌入式。在高级语言(如FORTRAN、COBOL、C、VB等)编写的程序中嵌入SQL语句,完成对数据库的操作。 在Access中,所有通过查询设计器设计出的查询,系统在后台都自动生成了相应的SQL语句。用户可在查询的SQL视图中看到相关的查询命令。在建立一个比较复杂的查询时,通常是先在查询设计视图中将基本的查询功能都实现,再切换到SQL视图通过编写SQL语句完成一些特殊的查询。 3.6.1使用SQL修改查询中的准则 使用SQL语句,可以直接在SQL视图中修改已建查询中的准则。 例3.23将例3.7已经建立的“获得奖励的女生”查询中的准则改为“获得奖励的男生”。 操作步骤如下。 (1) 在“设计视图”中打开已建立的查询“获得奖励的女生”,如图3.67所示。 (2) 单击功能区上“视图”按钮下侧的向下箭头,从下拉列表框中选择“SQL视图”选项,打开SQL视图窗口,如图3.68所示。 图3.67“获得奖励的女生”的“设计视图” 图3.68“获得奖励的女生”的“SQL视图” (3) 在图3.65所示窗口中选中要进行修改的部分,将条件="女"改为="男"。修改结果如下: SELECT 学生.学号, 学生.姓名, 学生.性别, 学生.奖励否 FROM 学生 WHERE (((学生.性别)="男") AND ((学生.奖励否)=True)); (4) 单击“视图”按钮,在数据表视图中预览查询的结果。 (5) 单击“文件”菜单下的“另存为”命令,保存本次查询为“获得奖励的男生”。 3.6.2数据定义 在Access中,数据定义是SQL的一种特定查询,使用数据定义查询可以在当前数据库中创建、删除、更改表和创建索引,每个数据定义查询只能包含一条数据定义语句。 用SQL数据定义查询处理表或索引的具体操作步骤如下。 (1) 打开数据库,选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 关闭“显示表”对话框。 (4) 选择“设计”选项卡“查询类型”组中的“数据定义”命令,打开数据定义“查询”窗口。 (5) 在数据定义“查询”窗口中输入SQL语句。 Access支持下列数据定义语句。 1. 建立数据表 定义数据表命令的格式如下: CREATE TABLE <表名> (<字段名1> <类型名> [(长度)][PRIMARY KEY][NOT NULL] [,<字段名2> <类型名>[(长度)][NOT NULL]]…) 功能: 创建一个数据表的结构。创建时如果表已经存在,则不会覆盖已经存在的同名表,而是返回一个错误信息,并取消这一任务。 说明: (1) <表名>指要创建的数据表的名称; <字段名><类型名>指要创建的数据表的字段名和字段类型; (长度)指字段长度,它仅限于短文本及二进制字段。 (2) 字段名与数据类型、数据类型与长度之间必须有空格隔开,各个字段定义之间用逗号分开。 (3) PRIMARY KEY表示将该字段定义为主键。 (4) NOT NULL表示不允许字段值为空,而NULL表示允许字段值为空。 Access中支持的常用数据类型及其说明如表3.8所示。 表3.8常用数据类型及其说明 数 据 类 型含义数 据 类 型含义 text或char短文本imageOLE对象 integer或int整型single或real单精度型 double或float双精度型date、time或datetime日期型 string字符型logical或bit是/否型 currency或money 货币型memo长文本 例3.24建立“职工管理”数据库,在库中建立一个“职工”表,该表由“职工号”“姓名”“性别”“出生日期”“婚否”字段组成,并设置“职工号”为主键。 操作步骤如下。 (1) 启动Access,创建“职工管理”数据库。 (2) 选择“创建”选项卡中的“查询”组。 (3) 单击“查询设计”按钮,弹出“显示表”对话框。 (4) 关闭弹出的“显示表”对话框,打开查询“设计视图”窗口。 (5) 选择“设计”选项卡“查询类型”组中的“数据定义”按钮,打开“查询”窗口。 (6) 在“查询”窗口中输入以下SQL语句: CREATE TABLE 职工(职工号 TEXT(4) PRIMARY KEY,姓名 TEXT(4),性别 TEXT(1),出生日期 DATE,婚否 LOGICAL) (7) 保存查询为“职工数据表定义”,查询建立完毕。 图3.69“职工”表的结构 (8) 单击功能区上的“运行”按钮,执行SQL语句,完成“职工”表的创建操作。 (9) 在导航窗格中选定“表”对象,可以看到在表列表框中多了一个“职工”表。 在“设计视图”窗口中打开“职工”表,显示的表结构如图3.69所示。 例3.25在“职工管理”数据库中建立一个数据表“工资”,并通过“职工号”字段建立与“职工”表的关系。 本例前五步的操作步骤和例3.24的步骤(1)~(5)相同,其SQL语句如下: CREATE TABLE 工资(职工号 TEXT(4) PRIMARY KEY REFERENCES 职工,工资 single,应扣 single,实发 single) 保存查询为“工资数据表定义”,查询建立完毕。然后运行“工资数据表定义”查询,完成“工资”表的创建操作。 单击“数据库工具”选项卡“关系”选项组中的“关系”按钮,在打开的“关系”窗口中可以看到两个表的结构及表之间已经建立的关系,如图3.70所示。 双击表间的连线,在弹出的“编辑关系”对话框中设置参照完整性,表间的“关系类型”为“一对一”,如图3.71所示。 图3.70“职工”表与“工资”表的关系 图3.71设置表间关系 2. 建立索引 建立索引的命令的格式如下: CREATE [UNIQUE]INDEX <索引名> ON <表名> (<字段名1> [ASC|DESC] [,<字段名2> [ASC|DESC],…])[WITH PRIMARY] 说明: (1) 该命令可为表创建一个单字段索引或多字段索引。 (2) 选项UNIQUE表示创建值唯一的索引。 (3) 选择ASC表示建立升序索引; 选择DESC表示建立降序索引; 省略时系统默认建立升序索引。 (4) 使用WITH PRIMARY短语可将该索引字段指定为主键。 例3.26为“工资”表按“工资”字段建立一个降序索引GZ。 本例前五步的操作步骤和例3.24的步骤(1)~(5)相同,其SQL语句如下: CREATE INDEX GZ ON 工资(工资 DESC) 例3.27为“职工”表按“性别”和“出生日期”字段建立一个多字段索引XBCSRQ。 其SQL语句如下: CREATE INDEX XBCSRQ ON 职工(性别,出生日期 ASC) 在设计视图中打开“职工”表,单击功能区上的“索引”按钮,打开“索引:职工”对话框,如图3.72所示。 图3.72“索引:职工”对话框 3. 删除表 在SQL语言中,创建完成的表不再需要时,可以使用DROP TABLE语句删除。 格式如下: DROP TABLE<表名> 功能: 删除指定的数据表文件。 说明: 一定要慎用DROP TABLE语句,一旦使用以后就无法恢复表或其中的数据,此表上建立的索引也将自动删除,并且无法恢复。 例3.28删除“工资备份”表。 操作步骤如下。 (1) 为“工资”表建立一个备份,命名为“工资备份”表。 (2) 打开数据定义“查询”窗口。 (3) 输入删除表的SQL语句: DROP TABLE 工资备份 (4) 单击功能区上的“运行”按钮,执行SQL语句,完成删除表的操作,则“工资备份”表将从“职工管理”数据库操作窗口消失。 4. 修改表的结构 修改数据表的SQL语句如下: ALTER TABLE 表名 ADD 字段名 数据类型 运行该语句后,将在已经存在的数据表中增加一个新字段。 ALTER TABLE 表名 DROP 字段名 运行该语句后,将在已经存在的数据表中删除指定的字段。 ALTER TABLE 表名 ALTER 字段名 数据类型 运行该语句后,将修改已经存在的字段。 例3.29为“职工”表增加一个“电话号码”字段。 操作步骤如下。 (1) 打开数据定义“查询”窗口。 (2) 输入SQL语句: ALTER TABLE 职工 ADD 电话号码 Char(8) (3) 单击功能区上的“运行”按钮,执行SQL语句,完成修改表的操作,为“职工”表增加一个“电话号码”字段。 例3.30删除“职工”表的“电话号码”字段。 SQL语句如下: ALTER TABLE 职工 DROP 电话号码 例3.31将“职工”表的“姓名”字段的宽度改为6。 SQL语句如下: ALTER TABLE 职工 ALTER 姓名 TEXT(6) 3.6.3数据操作 SQL语言的数据操作功能主要包括插入、更新、删除数据等相关操作,用SQL实现数据操作功能,通常也称为创建操作查询。 1. 插入数据 插入数据是指在数据表的尾部添加一条记录。格式如下: INSERT INTO 表名 [(<字段名清单>)] VALUES(<表达式清单>) 功能: 在指定的数据表的尾部添加一条新记录。 说明: (1) 该命令一次可向表中添加一条记录,也可以添加一条记录的几个字段值。 (2) VALUES短语表达式中的值与字段名对应,未指定的其余字段为NULL值。若省略<字段名清单>,则数据表中的所有字段必须在VALUES子句中都有相应的值。 例3.32在“职工”表尾部添加一条新记录。 操作步骤如下。 (1) 在“职工管理”数据库中打开数据定义“查询”窗口。 (2) 在数据定义“查询”窗口中,输入如下插入数据的SQL语句,建立追加查询。 INSERT INTO 职工(职工号,姓名,性别,出生日期,婚否) VALUES("1001","张明","男",#1975-03-09#,yes) (3) 单击功能区上的“运行”按钮,执行SQL语句,完成插入数据的操作。 例3.33在“职工”表尾部插入第二条记录。 SQL语句如下: INSERT INTO 职工 VALUES("1002","王芳","女",#1996-07-21#,no) 在“数据表视图”中打开职工表,显示结果如图3.73所示。 图3.73用SQL语句添加的职工表记录 2. 更新数据 更新数据是指对表中的所有记录或满足条件的记录用给定的值替代。格式如下: UPDATE <表名> SET <字段名1>=<表达式1>[,<字段名2>=<表达式2>…][WHERE <条件>] 功能: 根据WHERE子句指定的条件,对指定记录的字段值进行更新。 说明: (1) 用<表达式>的值替代<字段名>的值,一次可更新多个字段的值。若省略WHERE子句,则更新全部记录。 (2) 一次只能在单一的表中更新记录。 例3.34计算“工资”表中的实发数。 操作步骤如下。 (1) 在“职工管理”数据库窗口中打开数据定义“查询”窗口。 (2) 在“查询”窗口中输入如下更新数据的SQL语句,建立一个更新查询。 UPDATE 工资 SET 实发=工资-应扣 (3) 单击功能区上的“运行”按钮,执行SQL语句,完成更新数据的操作。 3. 删除数据 删除数据是指对表中的所有记录或满足条件的记录进行删除操作。格式如下: DELETE FROM <表名> [WHERE <条件>] 功能: 根据WHERE子句指定的条件,删除表中指定的记录。 说明: 若省略WHERE子句,则删除表中的全部记录。 例3.35将“职工”表中女职工的记录删除。 操作步骤如下。 (1) 在“职工管理”数据库窗口中,打开数据定义“查询”窗口。 (2) 在数据定义“查询”窗口中,输入如下删除数据的SQL语句,建立一个删除查询。 DELETE FROM 职工 WHERE 性别="女" (3) 单击功能区上的“运行”按钮,执行SQL语句,完成删除数据的操作。 3.6.4数据查询 在SQL查询中,SELECT语句构成了SQL的核心语句,其主要功能是实现数据源数据的筛选、投影和连接操作,并能够完成筛选字段的重命名、对数据源数据的组合、分类汇总、排序等具体操作,具有非常强大的数据查询功能。 SELECT语句的语法包括5个主要的子句,其一般结构如下: SELECT [ALL|DISTINCT|TOP n[PERCENT]] <字段列表> FROM <表或查询列表> [WHERE <条件表达式>] [GROUP BY <分组字段表>[HAVING <过滤条件>]] [ORDER BY <排序关键字1> [ASC|DESC][,<排序关键字2> [ASC|DESC]…]] 在SELECT语法格式中,方括号所括部分为可选内容,尖括号内为必选内容。各个参量的说明如下。 WHERE: 只筛选满足给定条件的记录。 GROUP BY: 根据所列字段名分组。 HAVING: 分组条件,设定GROUP BY后,设定应显示的记录。 ORDER BY: 根据所列字段名排序。 用户可以利用SQL查询实现前面所讲的各种查询。 1. 选择查询 例3.36查询“学生”表的全部字段。 操作步骤如下。 (1) 打开“教学管理系统”数据库。 (2) 选择“创建”选项卡中的“查询”组。 (3) 单击“查询设计”按钮,弹出“显示表”对话框。 (4) 关闭弹出的“显示表”对话框,打开查询“设计视图”窗口。 (5) 选择“设计”选项卡“结果”组中的“视图”按钮,在下拉菜单中选择“SQL视图”命令,打开SQL“查询”窗口。 (6) 在“查询”窗口中输入以下SQL语句: SELECT * FROM 学生 (7) 在数据表视图中查看查询结果。保存查询,查询建立完毕。 (8) 在设计视图中,单击功能区上的运行按钮,屏幕显示运行查询的结果。 例3.37在“学生”表中查询“学号”“姓名”字段。 本例的操作步骤与例3.36相同,其SQL语句如下: SELECT 学号,姓名 FROM 学生 例3.38查询“学生”表全部学生的“姓名”和“年龄”,删除重复的记录。 SQL语句如下: SELECT DISTINCT 姓名,YEAR(DATE())-YEAR(出生日期) AS 年龄 FROM 学生 说明: (1) DISTINCT选项忽略在选定字段中包含重复数据的记录。 (2) AS选项表示其后的是一个自己命名的列标题名,又称别名。 例3.39查询“学生”表学号为21010001和21020001的记录。 SQL语句如下: SELECT * FROM 学生 WHERE 学号 IN("21010001","21020001") 或 SELECT * FROM 学生 WHERE学号="21010001" OR 学号="21020001" 例3.40查询“成绩”表中成绩为70~90分的学生记录。 SQL语句如下: SELECT * FROM 成绩 WHERE 成绩 BETWEEN 70 AND 90 或 SELECT * FROM 成绩 WHERE 成绩>=70 AND 成绩<=90 例3.41查询“学生”表中姓“王”的男学生的记录。 SQL语句如下: SELECT * FROM 学生 WHERE 姓名 LIKE "王*" AND 性别="男" 或 SELECT * FROM 学生 WHERE LEFT(姓名,1)="王" AND 性别="男" 2. 计算查询 计算查询是对整个表的查询,一次查询只能得出一个计算结果。 例3.42在“学生”表中统计学生人数。 SQL语句如下: SELECT COUNT(*) AS 学生人数 FROM 学生 例3.43在“学生”表中统计会计专业的学生人数。 SQL语句如下: SELECT COUNT(*) AS 会计专业学生人数 FROM 学生 WHERE (((学生.专业)="会计")) 3. 分组查询 利用分组查询可以通过一次查询获得多个计算结果。分组查询是通过GROUP BY子句实现的。 例3.44统计“成绩”表中不同课程的“成绩”字段的最大值和最小值。 SQL语句如下: SELECT 课程号, MAX(成绩) AS 最高分, MIN(成绩) AS最低分 FROM 成绩 GROUP BY 课程号 例3.45统计“学生”表男女学生的人数。 SQL语句如下: SELECT 性别, COUNT(性别) AS 人数 FROM 学生 GROUP BY 性别 例3.46按“学号”升序查询“学生”表中的记录。 SQL语句如下: SELECT * FROM 学生 ORDER BY 学号 ASC 例3.47在“成绩”表中统计有10名以上学生选修的课程。 SQL语句如下: SELECT 课程号,COUNT(*) AS 选课人数 FROM 成绩 GROUP BY 课程号 HAVING COUNT(*)>=10 查询结果如图3.74所示。 图3.74例3.47的查询结果 本查询的执行过程是,首先对所有记录按“课程号”分组统计,然后对分组结果进行筛选,选修人数没有达到10个以上的课程被筛选掉。 HAVING与WHERE的区别在于: WHERE是对表中所有记录进行筛选,HAVING是对分组结果进行筛选。在分组查询中如果既选用了WHERE,又选用了HAVING,执行的顺序是先用WHERE限定记录,然后对筛选后的记录按GROUP BY指定的分组关键字分组,最后用HAVING子句限定分组。 例3.48显示年龄最小的20%的学生信息。 SQL语句如下: SELECT TOP 20 PERCENT * FROM 学生ORDER BY 出生日期 DESC 4. 多表查询 在数据查询中,经常涉及通过提取两个或多个表的数据,来完成综合数据的检索,因此就用到连接操作来实现若干表数据的查询。SELECT语句提供了专门的JOIN子句实现连接查询。 语句格式如下: SELECT <字段名表> FROM <表名l> [INNER JOIN <表名2> ON <连接条件>] 说明: INNER JOIN用来连接左右两个<表名>指定的表,ON用来指定连接条件。 例3.49在“学生”表、“成绩”表和“课程”表中,查询“学号”“姓名”“课程名称”“成绩”字段,并将查询结果按“学号”升序排序。 SQL语句如下: SELECT 学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩 FROM 学生,课程,成绩 WHERE 课程.课程号 = 成绩.课程号 AND 学生.学号 = 成绩.学号 ORDER BY 学生.学号 例3.50查询课程考试成绩在前3名的学生的学号、姓名、课程名称、成绩信息。 SQL语句如下: SELECT TOP 3 学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩 FROM 学生 INNER JOIN (课程 INNER JOIN 成绩 ON 课程.课程号 = 成绩.课程号) ON 学生.学号 = 成绩.学号 ORDER BY 成绩.成绩 DESC 例3.51查询选修“大学语文”课程学生的学号、姓名、成绩、教师姓名。 SQL语句如下: SELECT 学生.学号, 学生.姓名, 成绩.成绩, 教师.姓名 FROM 教师 INNER JOIN (课程 INNER JOIN (学生 INNER JOIN 成绩 ON 学生.学号 = 成绩.学号) ON 课程.课程号 = 成绩.课程号) ON 教师.教师编号 = 成绩.教师编号 WHERE (((课程.课程名称)="大学语文")) 5. 参数查询 例3.52按输入的学号和课程名称查询学生成绩信息。 SQL语句如下: SELECT 学生.学号, 学生.姓名, 课程.课程名称, 成绩.成绩 FROM 学生 INNER JOIN (课程 INNER JOIN 成绩 ON 课程.课程号 = 成绩.课程号) ON 学生.学号 = 成绩.学号 WHERE (学生.学号=[请输入学号:]) AND (课程.课程名称=[请输入课程名称:]) 6. 联合查询 联合查询可以将两个或两个以上表或查询所对应的多个字段的记录合并为一个查询表中的记录。在执行联合查询时,将返回所包含的表或查询中对应字段的记录。创建联合查询的唯一方法是使用SQL窗口。 语句格式如下: <SELECT语句1> UNION [ALL] <SELECT语句2> 说明: ALL缺省时,自动删除重复记录,否则合并全部结果。 例3.53创建联合查询,查询学生成绩大于80分或小于60分的学生记录。 操作步骤如下。 (1) 打开“教学管理系统”数据库。 (2) 选择“创建”选项卡中的“查询”组。 (3) 单击“查询设计”按钮,弹出“显示表”对话框。 (4) 关闭弹出的“显示表”对话框,打开查询设计视图窗口。 (5) 单击“设计”选项卡“查询类型”组中的“联合”按钮,打开“查询”窗口。 (6) 在“查询”窗口中输入以下SQL语句: SELECT * FROM 成绩 WHERE 成绩>=80 UNION SELECT * FROM 成绩 WHERE 成绩<60 (7) 保存查询,并在数据表视图中查看查询结果。 (8) 在设计视图中单击“运行”按钮,屏幕显示运行查询的结果。 注意: 要求合并的两个SELECT语句必须输出相同的字段个数,并且对应的字段必须具有相同的数据类型和长度。此时,Access不会关心每个字段的名称,当字段的名称不相同时,查询会使用来自第一个SELECT语句的名称。 7. 嵌套查询 在SQL语言中,当一个查询是另一个查询的条件时,即在一个SELECT语句的WHERE子句中出现另一个SELECT语句,这种查询称为嵌套查询。通常,把内层的查询子句称为子查询,把调用子查询的查询语句称为父查询。SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。需要特别指出的是,子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY子句只能对最终查询结果排序。 例3.54查询选修了“课程名称”为“大学英语”的学生的学号。 SQL语句如下: SELECT 学号 FROM 成绩 WHERE 课程号 IN (SELECT 课程号 FROM 课程 WHERE 课程名称="大学英语") 例3.55查询选修“大学英语”或“高等数学”的所有学生的学号。 SQL语句如下: SELECT 学号 FROM 成绩 WHERE 课程号=ANY (SELECT 课程号 FROM 课程 WHERE 课程名称="大学英语" OR 课程名称="高等数学") 例3.56查询选修101课的学生中成绩比选修102的最低成绩高的学生的学号和成绩。 SQL语句如下: SELECT 学号,成绩 FROM 成绩 WHERE 课程号="101" AND 成绩>ANY (SELECT 成绩 FROM 成绩 WHERE 课程号="102") 例3.57查询选修101课的学生中成绩比选修102的最高成绩高的学生的学号和成绩。 SQL语句如下: SELECT 学号,成绩 FROM 成绩 WHERE 课程号="101" AND 成绩>ALL (SELECT 成绩 FROM 成绩 WHERE 课程号="102") 例3.58查询“学生”表中有哪些学生已在“成绩”表中选修了课程。 SQL语句如下: SELECT 学号,姓名 FROM 学生 WHERE EXISTS (SELECT * FROM 成绩 WHERE 成绩.学号=学生.学号) 例3.59查询“学生”表中有哪些学生没有在“成绩”表中选修课程。 SQL语句如下: SELECT 学号,姓名 FROM 学生 WHERE NOT EXISTS (SELECT * FROM 成绩 WHERE 成绩.学号=学生.学号) 8. 生成表查询 例3.60生成包含“学号”“姓名”“专业”“课程名称”“成绩”字段的“不及格学生记录”表。 SQL语句如下: SELECT 学生.学号, 学生.姓名, 学生.专业, 课程.课程名称, 成绩.成绩 INTO 不及格学生记录 FROM 学生 INNER JOIN (课程 INNER JOIN 成绩 ON 课程.课程号 = 成绩.课程号) ON 学生.学号 = 成绩.学号 WHERE (((成绩.成绩)<60)) 9. 传递查询 Access的传递查询是自己并不执行,而是传递给另一个数据库执行。这种类型的查询直接将命令发送到ODBC数据库服务器,如Visual FoxPro、SQL Server等。使用传递查询,可以直接使用服务器上的表,而不需要建立链接。 创建传递查询,一般要完成两项工作: 一是设置要连接的数据库; 二是在SQL窗口中输入SQL语句。SQL语句的输入与在本地数据库中的查询是一样的,因此传递查询的关键是设置连接的数据库。使用传递查询会为查询添加如下3个新属性。 (1) ODBC连接字符串: 指定ODBC连接字符串,默认值为ODBC。 (2) 返回记录: 指定查询是否返回记录,默认值为“是”。 (3) 日志消息: 指定Access是否将来自服务器的警告和信息记录在本地表中,默认值为“否”。 创建传递查询的具体操作步骤如下。 (1) 在数据库操作窗口选择“创建”选项卡中的“查询”组。 (2) 单击“查询设计”按钮,弹出“显示表”对话框。 (3) 关闭弹出的“显示表”对话框,打开查询“设计视图”窗口。 (4) 选择“设计”选项卡“查询类型”组中的“传递”命令,打开“查询”窗口。 (5) 选择“显示/隐藏”组中的“属性表”按钮,弹出“属性表”窗格,设置“ODBC连接字符串”属性。该属性将指定Access执行查询所需的连接信息,如图3.75所示。用户可以输入连接信息,也可以单击“生成器”按钮,获得关于要连接的服务器的必要信息。 (6) 设置要连接的数据库。在“属性表”窗格中,单击“ODBC连接字符串”的“生成器”按钮,弹出“选择数据源”对话框,选择“机器数据源”选项卡,如图3.76所示。如果要选择的数据源已经显示在列表框中,则可以直接在列表框中选定; 如果不存在,则单击“新建”按钮,在弹出的对话框中输入要连接的服务器信息。 (7) 在SQL传递查询窗口中输入SQL查询命令。 (8) 单击“运行”按钮,执行该查询。 图3.75“属性表”窗格 图3.76“选择数据源”对话框中的“机器数据源”选项卡 思考题 1. 什么是查询?查询有什么功能? 2. 查询有哪几种类型? 3. 常用的查询向导有哪几种? 4. 建立查询一般经过哪几个阶段? 5. 如何使用查询的设计视图? 6. 操作查询分为哪几种? 7. SQL语言的功能和特点是什么?