80
Access 2003数据库教程
79
第5章 查询操作与高级应用
第5章 查询操作与高级应用
本章学习目标
可利用查询可以选择一组满足指定条件的
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
,还可以将不同表中的信息组合起来,提供一个相关数据项的统一视图。本章从查询的种类与应用着手,对查询的建立方法、查询条件、查询
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
、SQL查询以及查询操作进行专门的介绍。通过本章的学习,读者应该掌握以下内容:
· 认识Access 2003中的查询种类
· 掌握不同查询的建立方法
· 查询准则的设计
· SQL查询语句的使用
· 使用查询操作表或表中数据
5.1 查询的种类与应用
查询是Access处理和分析数据的工具,它能够把多个表中的数据抽取出来,供用户查看、更改和分析使用。
5.1.1 查询的种类
Access 2003支持5种查询方式:选择查询、操作查询、SQL查询、交叉表查询和参数查询。下面简单介绍各种查询的特点。
1.
选择查询
选择查询是最常见的查询类型。选择查询可以从—个或多个表或者其他的查询中获取数据,并按照所需要的排列次序显示,利用选择查询可以方便地查看一个或多个表中的部分数据。查询的结果是一个数据记录的动态集,用户可以对动态集中的数据记录进行修改、删除,也可以增加新的记录,对动态集所作的修改会自动写入相关联的表中。
2.
操作查询
操作查询就是在一个操作中对查询中所生成的动态集进行更改的查询。操作查询可分为:生成表查询、追加查询、更新查询和删除查询,生成表查询和追加查询可以复制原有的数据,更新查询和删除查询可以更改现存的数据。操作查询只能更改和复制用户的数据,而不能返回数据记录。
· 生成表查询:可以利用从一个或多个表及查询中的查询结果创建一个新表。
· 追加查询:将查询结果添加到现存的一个或多个表或者查询的末尾。
· 更新查询:根据查询中指定的条件,更改一个或多个表中的记录。
· 删除查询,根据查询中指定的条件,从一个或多个表中删除相关记录。
3.
SQL查询
SQL是一种结构化查询语言,是数据库操作的工业化标准语言,使用SQL语言可以对任何数据库管理系统进行操作。SQL查询就是使用SQL语言创建的查询,它又可以分为联合查询、传递查询和数据定义查询等。其中联合查询是SQL语言所特有的,可以将来自一个或多个表或者其他查询中的字段组合起来作为查询结果中的一个字段,可以创建快照类型的记录集合对象;传递查询就是直接将命令发送到ODBC数据源的查询,在服务器上进行查询操作;数据定义查询也是SQL查询所专有的,用户可以通过SQL语句来创建、修改或删除表对象,并且可以动态地对表的结构进行修改。
4.
交叉表查询
交叉表查询可以汇总数据字段的内容,例如日期或数字字段。在这种查询中,汇总计算的结果显示在行与列交叉的单元格中。交叉表查询还可以计算平均值、总计、最大值或最小值等。
5.
参数查询
参数查询可以在运行查询的过程中输入参数值来设定查询准则,而不必重新创建一个新查询。参数查询不是一种独立的查询,它扩大了其他查询的灵活性。执行参数查询时,系统会显示一个对话框提示用户输入参数的值。
5.1.2 查询的应用
查询的应用主要有如下几个方面。
(1)
选择字段
在查询中,可以只选择表中的部分字段。例如,对于学生表,只选择学号、姓名、性别、系别和专业建立一个查询。利用这一查询功能,可以通过选择一个表中的不同字段生成所需的多个表。
(2)
选择记录
根据指定的条件查询表中的记录。例如,在学生表中,可以创建一个只显示专业为“计算机科学与技术”的学生信息。
(3)
编辑记录
编辑记录主要是添加记录、修改记录和删除记录等。可以利用查询添加、修改和删除表中的记录。例如,根据入学日期,将已毕业的学生从学生表中删除。
(4)
实现计算
可以在查询中进行各种统计计算,如计算某门课的平均成绩。还可以建立一个计算字段来保存计算结果。
(5)
利用查询的结果生成窗体或报表
要从一个或多个表中选择合适的数据显示在窗体和报表中,可以先基于一个或多个表创建查询,然后,以查询的结果作为窗体或报表的数据源。
(6)
利用查询的结果创建表
利用查询的结果可以建立一个新表。例如,可以利用查询将学生表中的“系别”为“计算机系”的学生记录存放到一个新表中。
总之,用户可以利用查询查看指定的字段,显示特定条件的记录。如果需要,可以将查询的结果保存起来,也可以将其作为窗体或报表的数据来源。
5.2 查询的建立方法
创建查询的方法主要有使用查询向导和查询设计视图两种。使用查询向导是利用提示指导用户完成创建查询的工作,而使用查询设计视图,不仅可以完成查询设计,也可以修改已有的查询,而且设计视图的功能更丰富和更强大。
5.2.1 使用查询向导
简单查询是应用最广泛的一种查询,它可以从一个或多个表、查询中查找相关记录。使用“简单查询向导”创建的查询具有以下特点:
· 不能添加选择准则或者指定查询的排序次序。
· 不能改变查询中字段的次序,字段将一直以向第一个向导对话框中添加它们时的顺序出现。
· 如果所选的字段中有一个或者多个数字字段,该向导允许放置一个汇总查询,显示数字字段的总计值、平均值、最小值或者最大值。在查询结果集中还可以包含一个记录数量的计数。
· 如果所选的一个或者多个字段为“日期/时间”数据类型,则可以指定按日期范围分组,汇总查询—天、一月、一季或者一年。
1.
简单查询向导
【例5.1】 以学生、课程和成绩表为数据源,利用向导创建学生成绩查询。
主要操作步骤如下:
(1)
在数据库窗口中,选择“查询”对象,双击“使用向导创建查询”,系统打开“简单查询向导”的第一个对话框,如图5.1所示。
(2)
在“表/查询”下拉列表中选择“表:学生”,学生表的所有字段都将出现在“可用字段”列表中。
(3)
在“可用字段”列表中选择查询字段,例如,选择学号、姓名字段并单击按钮将其添加到“选定的字段”列表中,也可以通过双击字段将其添加到“选定的字段”列表。重复步骤(2)和(3),完成“课程”表的“课程名称”和“成绩”表的“成绩”字段的添加。
图5.1 “简单查询向导”对话框之一
(4)
单击“下一步”,打开第二个向导对话框, 选择是使用明细查询还是使用汇总查询,明细查询可以显示每个记录的每个字段,汇总查询可以计算字段的总值、平均值、最小值、最大值和记录数等。接受默认的“明细”选项,如图5.2所示。
图5.2 “简单查询向导”窗口之二
(7)
单击“下一步”按钮,打开最后一个对话框,如图5.3所示。
图5.3 “简单查询向导”窗口之三
在“请为查询指定标
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
”文本框中,输入查询名字“学生成绩查询”,单击“完成”,在“数据表”视图中显示查询结果,如图5.4所示。
图5.4 查询结果
2.
向导的汇总查询
【例5.2】 查询每位同学的选课门数、总成绩、平均成绩、最低成绩和最高成绩。
主要操作步骤如下:
(1)
在“表/查询”下拉列表框中选择“表:学生”,添加学生表的“姓名”字段到“选定的字段”列表中;在“表|查询”下拉列表框选择“表:成绩”,添加成绩表的“成绩”字段到“选定的字段”列表中,如图5.5所示。
图5.5 选择查询字段
注意:
汇总查询必须包含用于分组数据的字段(姓名)和汇总的数字值。如果添加了其他字段,例如“课程名称”,则所有记录都将出现在汇总查询中,将无法得到所期望的汇总。
(2)
单击“下一步”按钮,在打开的对话框中,选择“汇总”选项,单击“汇总选项”按钮,打开“汇总选项”对话框,如图5.6所示。选中“汇总”、“平均”、“最小”和“最大”复选框,分别计算学生的总成绩、平均成绩、最低成绩和最高成绩。选中“统计成绩中的记录数”复选框,为分组查询添加一列,提供记录计数。
(3)
单击“确定”按钮,返回第二个向导对话框,然后单击“下一步”按钮,转向第三个向导对话框,为查询命名。
(4)
单击“完成”按钮,执行该汇总查询,查询结果如图5.7所示。
图5.6 “汇总选项”对话框
图5.7 汇总查询结果
5.2.2 使用查询设计器
使用“简单查询向导”有很大的局限性,最好的查询方法是在Access 2003的图形化“查询设计”窗口中设计查询。查询“设计视图”是Access最为强大的功能特征之一。
在Access 2003中,查询有3种视图:设计视图、数据表视图和SQL视图。使用设计视图,不仅可以创建各种类型的查询,而且可以对已有的查询进行修改。例如,要打开利用向导创建的“学生成绩查询”,可在数据库窗口中选中该查询,然后单击工具栏上的“设计”按钮,结果如图5.8所示。
1.
查询设计视图
设计视图的窗口分两部分,上半部分显示查询所使用的表对象,下半部分定义查询设计的
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
。
· 字段:选择查询中要包含的表字段。
· 表:选择字段的来源表。
· 排序:定义字段的排序方式。
· 显示:设置是否在数据表视图中显示所选字段。
· 条件:设置字段的查询条件。
· 或:用于设置多条件之间的或条件。
图5.8 查询设计视图
2.
查询设计视图的工具栏
查询设计视图的工具栏如图5.9所示。
图5.9 设计视图工具栏
· 视图:可以在查询的3个视图之间切换。
· 查询类型:可以在选择查询、交叉表查询、生成表查询、更新查询、追加查询和删除查询之间切换。
· 运行:执行查询,以数据表视图的形式显示结果。
· 显示表:打开显示表对话框,列出当前数据库中所有的表和查询,用户可以选择查询要使用的对象。
· 合计:可以对在查询设计中增加“总计”行,用于进行各种统计计算。
· 上限值:可以查询结果的显示进行约定,并在文本框中指定所要显示的范围。
· 属性:显示光标指向的对象属性,在这里对字段属性进行修改,不会反映到数据表中。
· 生成器:用于使用表达式生成器对话框,生成查询条件表达式,该按钮当光标处于“条件”栏中时才有效。
· 数据库窗口:返回数据库窗口。
· 新对象:打开新建表、新建查询和新建窗体等对话框,以创建相应的对象。
3.
创建查询
在设计视图中创建查询,首先应单击“显示表”按钮,在打开的“显示表”对话框中选择查询所依据的表、查询,并将其添加到设计视图的窗口中。如果选择多个表,多个表之间应先建立关联。
【例5.3】 利用学生、课程和成绩表,创建一个不及格学生的成绩查询。
主要操作步骤如下:
(1)
在“显示表”对话框中,把学生、课程和成绩表添加到设计视图的窗口中。
(2)
依次拖入或在“字段”行中选择“姓名”、“课程名称”和“成绩”字段。
(3)
在成绩列中的“条件”行中输入条件“<60”,设计结果如图5.10所示。
图5.10 学生选课成绩查询设计视图
(4)
单击工具栏上的“运行”按钮,查询结果如图5.11所示。
图5.11 学生选课成绩查询运行结果
如果生成的查询不满足要求,可以单击视图按钮,返回设计视图进行修改。关闭设计视图窗口时,系统会要求输入查询名称,可以选择一个符合查询特征的名字,以保存查询对象,便于以后的使用。
5.3 查 询 条 件
在实际应用中,用户的查询并非只是简单的查询,往往需要指定一定条件,使查询结果中仅包含满足查询条件的记录。例如,查找计算机系的张姓学生,这种带条件的查询需要通过设置查询条件来实现。查询条件是运算符、常量、字段值、函数以及字段名和属性等的任意组合,能够计算出一个结果。了解查询条件的组成及书写方法,对建立条件查询非常重要。
前面介绍的查询中,查询方式是根据查询准则检查表中的字段值是否相匹配,但在实际查询中往往需要对原有的数据进行适当的加工,以便显示出实际需要的结果。例如在“学生期末考试成绩表”中,要查询每名学生的平均成绩、总评成绩、单科的班级平均成绩等,就需要使用表达式与函数进行计算,除此之外,数据库的其他对象也经常要用到表达式。
5.3.1 表达式
要想使用Access 2003数据库中的表达式,首先要清楚什么是常数、常量、变量和如何使用Access 2003的表达式。
1.
常数
通常可以在表达式中使用常数,也可以在用来编写Access模块的VBA语句中将它赋给常量和变量。在具体应用中,日期型的常数需要用界限符(#)括起来,例如,#2003-10-10#;字符型常数要用单引号(‘ ’)或双引号(“ ”)括起来(单引号和双引号必须是半角的符号);数值型常数可以直接引用值,例如,123.56、123等。
2.
常量
常量代表固定不变的数值或字符串值。例如,Ture、False和Null都是常量。常量可以代表单个字符串、数值、任何包含数值或逻辑运算符的表达式,但不能包含IS语句和乘幂运算符。在表、查询、窗体、报表及宏的表达式中均可以使用常量,在模块中需要使用Const语句来声明常量。常量的命名规则与变量的命名规则相同。
Access系统支持3类常量:
· 符号常量:用Const语句说明,可以在模块中引用。
· 固有常量:是Access系统自动定义的作为操作参数和函数值的常量,并提供了对VB、VBA、DAO库常量的访问。
· 系统定义常量:True、False和Null。
3.
变量
变量是指命名的存储空间,用于存储在程序执行过程中可以改变的数据。有关变量的详细内容将在第10章介绍。
4.
表达式
用运算符将常数、常量、变量、函数以及字段名、控件和属性等连接起来的式子称为表达式,表达式将计算出一个单个值。可以将表达式作为许多属性和操作参数的设置值;可以利用表达式在查询中设置条件(搜索条件)或定义计算字段;还可以利用表达式在窗体、报表和数据访问页中定义计算控件,以及在宏中设置条件。在Access 2003中,可以使用表达式来定义检查约束。
Access 2003系统提供了算术运算、关系(比较)运算、连接运算和逻辑运算4种基本运算表达式。
(1)
算术表达式
算术运算符,包括+、-、*、/,也就是常用的四则运算符。算术运算符仅用于数值运算并且必须有两个数值运算数。
在查询中使用的计算字段就需要用到算术运算表达式。
【例5.4】 利用“学生期末考试成绩表”查询每位同学的总成绩和平均成绩。
主要设计步骤如下:
①
打开“学生”数据库,进入查询的“设计视图”。
②
在“显示表”对话框中的“表”选项卡中选择“学生期末考试成绩表”,单击“添加”按钮后,再单击“关闭”按钮。
③
在表设计视图中,把表中的学号和姓名字段直接拖到字段行中。
④
还要在字段行中加入两列,一列计算平均成绩,一列计算总成绩,由于总成绩和平均成绩并不是表中字段,在此要使用如下格式定义:
总成绩:(高等数学+大学英语+普通物理+高级语言程序设计+微机原理)
平均成绩:(高等数学+大学英语+普通物理+高级语言程序设计+微机原理)/5
查询的设计视图如图5.12所示。
图5.12 设计视图
⑤
选择“查询”菜单中的“运行”命令,即显示查询结果,如图5.13所示。
图5.13 查询结果
(2)
关系表达式
关系运算符包括:>、<、>=、<=、<>。用关系运算符连接的两个表达式构成关系表达式,结果为一个逻辑值True或者False。
(3)
连接运算表达式
连接运算符包括:&和+。连接运算符具有连接字符串的功能,详细介绍见第10章。
(4)
逻辑运算表达式
逻辑运算符包括:And、Or、Not。逻辑运算主要用于对真、假判断。And表示两个操作数都为True时表达式的值才为True;Or表示两个操作数只要有一个为True,表达式的值就为True;Not表示取操作数的相反值。
例如,查询计算机系的学生党员与查询计算机系学生及全院学生党员,可分别设定条件为:
政治面貌="党员" And 系别="计算机系"
政治面貌="党员" Or 系别="计算机系"
【例5.5】 在学生表中查询不是男生的记录。
可以在“性别”字段的条件行中输入:
Not -1(等价于<>-1)
因为性别字段的类型为“是/否”型,-1表示“是”,我们约定为男;0表示“否”,我们约定为女。
(5)
其他运算表达式
其他的Access 2003运算符与比较运算有关,这些运算符根据字段中的值是否符合这个运算符的限定条件返回Ture或False。
· Between…And…
用于指定一个字段值的取值范围,指定的范围之间用And连接。
【例5.6】 在学生期末考试成绩表中,查找所有“大学英语”成绩在70~90之间的 学生。
可以在“大学英语”字段条件行中输入:
Between 70 And 90(等价于>=70 And <=90=
【例5.7】 查询1981年出生的学生信息。
可以在出生日期字段的条件行中输入:
Between #1981-0l-0l# and #1981-12-3l#
或
>= #1981-01-01# And <=# 198l-12-31#
注意:
#号是日期型数据的定界符,这样系统就不会将该数据认为是文本或其他数据类型。
· In
用于指定一个字段值的列表,列表中的任何一个值都可与查询的字段相匹配。
【例5.8】 查询所有政治面貌为党员或团员的学生。
可以在政治面貌字段的条件行中输入:
In("党员","团员")
或
"党员" Or "团员"
上面两种用法是等价的,当表达式中包含的值较多时,使用In运算符会使表达式更简洁,意义也更明确。
· Is
指定所在字段中是否包含数据,Is Null表示查找该字段没有数据的记录,Is Not Null表示查找该字段有数据的记录。
【例5.9】 查询所有大学英语无成绩的学生。
可以在大学英语字段的条件行中输入:
Is Null
· Like
查找相匹配的文字,用通配符来设定文字的匹配条件。
Access 2003提供的通配符有:
· ? 代表任意一个字符。
· * 代表任意多个字符。
· # 代表任意一个数字位(0~9)。
· [字符表] 代表在字符表中的单一字符。
· [!字符表] 代表不在字符表中的单一字符。
可以使用一对方括号为字符串中该位置的字符设置一个范围,如[0-9]、[a-z]、[!a-z]等,连接符“-”用于分隔范围的上下界。
例如:
Like "AV?? "
以AV开始的连续4个字符,后2位为任意字符
Like "李*"
表示以李开头的所有字符串
Like "A[b-f]V### "
以A开头,后跟b~f之间的一个字母和3个数字
Like "?[!3-8][A-P]*"
第一个字符为任意字符,第二个为非3~8的任意字符,第三个
为A~P之间的一个字母,其后为任意字符串
5.3.2 标准函数
表达式不但可以使用数学运算符,还可以使用Access 2003内置函数。系统提供了大量的标准函数,如数值函数、字符函数、日期时间函数和统计函数等。这些函数为用户设计查询条件提供了极大的便利,也为进行统计计算、实现数据处理提供了有效的方法。
关于函数的详细内容将在第10章中介绍,在此仅简单介绍常用的统计函数。
1.
求和函数
格式:SUM(<字符串表达式>)
功能:返回字段中值的总和。
说明:“字符串表达式”可以是一个字段名(数值类型),或者是含有数值类型字段的表达式。
例如,有一个“单价”字段和一个“数量”字段,求总价。可以用SUM函数计算其总价:SUM(单价*数量)
2.
求平均函数
格式:AVG(<字符串表达式>)
功能:求数值类型字段的平均值。
说明:
①
“字符串表达式”可以是一个字段名(数值类型),或者是含有数值型字段的表 达式。
②
AVG不计算任何Null值字段。
例如,设有一个“成绩”字段,可用AVG(成绩)求平均分。
3.
统计记录个数函数
格式:COUNT(<字符串表达式>)
功能:统计记录个数。
说明:
①
“字符串表达式”可以是一个字段名(数值类型),或是含有数值型字段的表达式。
②
当用格式COUNT(*)时,将统计所有记录的个数,包括有Null值字段的记录。
例如,COUNT(姓名)(其中“姓名”为字段名)。统计姓名字段不是Null值的所有记录的个数。
4.
最大、最小值函数
格式:MAX(<字符串表达式>)
MIN(<字符串表达式>)
功能:返回一组指定字段中的最大、最小值。
说明:“字符串表达式”可以是一个字段名(数字类型),或者是含有数字型字段的表达式。
例如,有一个“成绩”字段,可以用MAX(成绩)求该字段中的最大值,用MIN(成绩)求该字段中的最小值。
在查询条件设计过程中,灵活运用上面介绍的函数与表达式,对于增强查询的功能、丰富查询的应用非常重要。
5.4 查 询 设 计
在实际应用中,需要创建的查询多种多样,本节将重点介绍条件选择查询、交叉表查询、参数查询及4种操作查询的设计。
5.4.1 条件选择查询
使用Access 2003提供的向导可以方便地创建基于一个或多个表的不带条件的查询。但在日常应用中,需要建立的查询往往带有一定的条件,例如,查找计算机系2004年入学的计算机科学与技术专业的学生。这种查询需要通过“设计”视图来创建,在“设计”视图的“条件”行输入查询条件。
【例5.10】 查询计算机系2004年入学的计算机科学与技术专业的学生,显示学号、姓名、性别、入学日期和系别。
主要操作步骤如下:
(1)
在“学生管理”数据库窗口中,单击“查询”对象,然后双击“在设计视图中创建查询”项,系统将打开如图5.14所示的查询“设计”视图,同时在此视图上面还出现一个“显示表”对话框。
(2)
在“显示表”对话框中,把学生表添加到设计视图上半部分的窗口中。
(3)
分别双击“学号”、“姓名”、“性别”、“入学日期”和“系别”等字段,这时5个字段将依次显示在“字段”行上的第1列到第5列中,同时,“表”行将显示出这些字段所在表的名称,“显示”行复选框均选中,代表查询结果中显示这些字段。但由于查询要求显示的字段并没有“专业”字段,该字段仅作为查询的一个条件,所以应取消“专业”字段“显示”行上的复选框的选中状态,结果如图5.15所示。
图5.14 查询“设计”视图
图5.15 设置查询字段
(4)
在“入学日期”字段列的“条件”行中可以输入以下等价条件:
Year([入学日期]) = 2004
或
Between #2004-1-1# And #2004-12-31#
或
>= #2004-1-1# And <= #2004-12-31#
在“系别”和“专业”字段列的“条件”行中分别输入条件:“计算机系”和“计算机科学与技术”,设计结果如图5.16所示。
注意:
在查询表达式中使用字段名,要用方括号括起来,运算符与引号等要用西文字符。
图5.16 学生信息查询设计视图
(5)
单击工具栏上的“保存”按钮,在弹出的“另存为”对话框中,命名查询为“计算机系计算机科学与技术专业2004年入学的学生”,然后单击“确定”按钮,保存创建的查询。可以用多种方式运行该查询,查看查询结果。
设计查询,要正确理解查询条件。在上面建立的查询中,涉及3个条件,查询结果要求同时满足3个条件,即是与(and)条件,所以条件均写在“条件”行上。若希望查询计算机科学与技术专业或者2004年入学的学生,就要使用“或”行。
例如,查询计算机科学与技术专业或者2004年入学的学生,查询设计视图结果如图5.17所示。
图5.17 使用“或”条件
如果生成的查询不满足要求,可以单击视图按钮,返回设计视图进行修改。
5.4.2 交叉表查询
交叉表查询以行和列的字段作为标题和条件选取数据,并在行与列的交叉处对数据进行汇总、统计计算等。例如,我们曾经依据学生、课程和成绩表建立了一个“选课成绩查询”,在这个查询中给出了每名学生选课的成绩,但由于在“课程名称”列中出现了重复的课程名称,使查询的结果不够清晰和合理,使用交叉表查询可以很好地解决这一问题。
设计交叉表查询,用户需要指定三种字段:一是放在数据表最左端的行标题,它把某一字段或相关的数据放入指定的一行中;二是放在数据表最上边的列标题,它对每一列指定的字段或表进行统计,并将统计结果放在该列中;三是放在数据表行与列交叉位置上的字段,用户需要为该字段指定一个总计项,如Sum、Avg、Count等。对于交叉表查询,用户只能指定一个总计类型的字段。
1.
使用向导创建交叉表查询
【例5.11】 建立学生选课成绩交叉表查询。
主要操作步骤如下:
(1)
在“数据库”窗口中单击“查询”对象,再单击“新建”按钮,在“新建”查询对话框中选择“交叉表查询向导”,打开如图5.18所示交叉表查询向导对话框之一。在“视图”选项组中选择查询,在上方的列表框中选择“学生选课成绩”查询。
图5.18 交叉表查询向导对话框之一
(2)
单击“下一步”按钮,在向导对话框之二中(如图5.19所示),为交叉表选择一个行标题,如“姓名”;单击“下一步”按钮,在向导对话框之三中(如图5.20所示),为交叉表选择一个列标题,如“课程名称”;单击“下一步”按钮,打开向导对话框之四,如图5.21所示。
(3)
为行和列的交叉点指定一个值。因为要显示学生选课的成绩,在“字段”列表框中选中“成绩”;在函数列表框中选择一个总计函数,由于所建交叉表只需显示成绩,不需作其他计算,所以选择“第一项”,并取消选择“是,包含各行小计”复选框。
图5.19 交叉表查询向导对话框之二
图5.20 交叉表查询向导对话框之三
图5.21 交叉表查询向导对话框之四
(4)
为所创建的交叉表查询指定一个名字,如“交叉表成绩查询”,单击“完成”按钮,创建交叉表查询的运行结果如图5.22所示。
这里应注意:创建交叉表的数据源必须来自一个表或查询。如果数据源来自多个表,可以先建立一个查询,然后再用此查询作为数据源。
图5.22 交叉表查询运行结果
2.
在“设计”视图下创建交叉表查询
使用设计视图,可以基于多个表创建常见交叉表查询。
【例5.12】 在“学生管理”数据库中,使用“学生”、“课程”和“成绩”表创建一个交叉表查询,使其显示每位学生各门课的成绩。
主要操作步骤如下:
(1)
在“学生管理”数据库窗口中,单击“查询”对象,然后双击“在设计视图中创建查询”项,系统将打开查询设计视图,同时显示“显示表”对话框。
(2)
在“显示表”对话框中,把“学生”、“课程”和“成绩”表添加到设计视图上半部分的窗口中,然后关闭“显示表”对话框。
(3)
分别双击学生表中的“姓名”字段、课程表中的“课程名称”字段和成绩表中的“成绩”字段,依次添加到“字段”行的第1列到第3列。
(4)
单击工具栏上的“查询类型”按钮,然后从下拉列表中选择“交叉表查询”命令。
(5)
单击“姓名”列的“交叉表”行单元格,选择其下拉列表中的“行标题”选项,使“姓名”放在每行的左边;单击“课程名称”列的“交叉表”行单元格,选择其下拉列表中的“列标题”选项,使“课程名称”放在第一行上;单击“成绩”列的“交叉表”行单元格,选择其下拉列表中的“值”选项,使在行列的交叉处显示成绩数值;单击“成绩”列的“总计”行单元格,选择其下拉列表中的“第一条记录”函数,设计视图结果如图5.23所示。
图5.23 交叉表设计视图
(6)
保存与运行创建的交叉表查询,结果与图5.22相同。
5.4.3 参数查询
参数查询可以在运行查询的过程中根据参数输入值自动设定查询的规则,用户在执行参数查询时会显示一个输入对话框以提示用户输入信息,这种查询叫做参数查询。当需要对某个字段进行参数查询时,首先切换到这个查询的设计视图,然后在作为参数使用的字段下的“条件”单元格中的方括号内输入相应的提示文本,此查询运行时,Access 2003将显示该提示。
参数查询是建立在选择查询或交叉查询的基础之上的,如果用户希望根据某个或某些字段的不同值来查找记录,就可以使用参数查询。在参数查询中,可以建立单参数查询,也可以建立多参数查询。
【例5.13】 以学生、课程和成绩表为数据源,查询某班级、某门课和某分数之上的学生选课情况。假定学号的第4、5位为班级号码。
主要操作步骤如下:
(1)
在“学生管理”数据库窗口中,单击“查询”对象,然后双击“在设计视图中创建查询”,打开查询设计视图,同时显示 “显示表”对话框。
(2)
在“显示表”对话框中,把“学生”、“课程”和“成绩”表添加到设计视图上半部分的窗口中,然后关闭“显示表”对话框。
(3)
分别双击学生表中的“学号”和“姓名”字段、课程表中的“课程名称”字段和成绩表中的“成绩”字段,依次添加到“字段”行的第1列到第4列。
(4)
在“字段“行的第1列单元格中,把“学号”字段名改为:班级: Mid([学生]![学号],4,2),在“条件”行单元格输入:[输入班级:]。
其含义是:在查询结果中,显示别名“班级”,取每个记录 “学号”字段值的第4、5位与“输入班级”参数值进行比较,确定是否是要查询的班级。
(5)
在“课程名称”列的“条件”单元格输入:[输入课程名称:]。
(6)
在“成绩”列的“条件”单元格输入:>[输入成绩(>=):]。
设计视图结果如图5.24所示。
图5.24 参数查询设计视图
(7)
单击工具栏上的“视图”按钮,或单击工具栏上的“运行”按钮,系统将依次显示输入班级、输入课程名称和输入成绩3个“输入参数”对话框,用户可以根据需要输入参数值,查询需要的学生所选课的成绩信息。
注意:
在本例中,学号的第4,5位代表班级号,为取得班级号,用到了字符串截取函数Mid,可参见第10章介绍。
对于参数查询,关键是查询条件含义的理解,较之选择查询,参数查询能满足更多的应用要求。
5.4.4 操作查询
操作查询用于创建新表或者修改现有表中的数据。Access 2003提供的操作查询有以下几种类型:
· 生成表查询:用查询结果集中的数据创建新表。从表中查询数据要比从查询中访问数据快,如果经常需要从多个表中提取数据,最好的办法是使用生成表查询,即从多个表中提取数据组合起来生成一个新表永久保存。
· 删除查询:用于从表中删除与查询结果集中的行相对应的记录。
· 追加查询:把查询结果添加到另一个表,但要注意两者之间的格式与类型要相同。
· 更新查询:根据查询结果集中的行改变表中现有记录的相应字段的值。
1.
创建生成表查询
【例5.14】 使用生成表查询,将学生选课成绩在60分以下的学生信息保存到一个新表中。
主要操作步骤如下:
(1)
打开查询设计视图,将“学生”、“课程”、“成绩”表添加到窗口中。
(2)
单击“查询类型”按钮或选择“查询”菜单中的“生成表查询”命令,打开如 图5.25所示的“生成表”对话框。
图5.25 “生成表”对话框
在对话框中,输入新表的名称,并选择保存到当前数据库还是另一数据库中。
(3)
在查询设计视图中设置所需的各个选项,与选择查询设计相同,设计结果如图5.26所示。
(4)
保存所作的设置,单击“运行”按钮,系统会弹出“创建新表”对话框,通过选择“是/否”向新表粘贴记录,确定是否创建新表。
也可以先保存查询,以后再运行查询来生成表。若运行了生成表查询,在数据库的表对象中,可以查看所生成的表。
图5.26 生成表查询设计视图
2.
创建删除查询
删除查询可以从表中删除符合条件的记录,且所作的删除操作无法撤销。删除查询可以从单个表中删除记录,也可以从多个相互关联的表中删除记录。如果要从多个表中删除相关记录,多个表之间必须满足以下条件:
· 在“关系”窗口定义相关表之间的关系。
· 在“关系”窗口中选中“实施参照完整性”复选框。
· 在“关系”窗口中选中“级联删除相关记录”复选框。
【例5.15】 在“学生”、“课程”和“成绩”表中,已经将学生选课成绩在60分以下的学生信息保存到一个新表中,使用删除查询从成绩表中删除选课成绩在60分以下的学生记录。
主要操作步骤如下:
(1)
打开查询设计视图,将“成绩”表添加到窗口中。
(2)
单击“查询类型”按钮,从下拉菜单中选择“删除查询”命令。这时,查询设计视图中添加了一个“删除”行。
(3)
单击“成绩”字段列表中的“*”号,并将其拖到“字段”行的第1列上,第一列将显示“成绩.*”,同时,在该字段“删除”单元格中显示“From”,表示从何处删除记录。
(4)
将“成绩”字段拖到“字段”行的第2列上,同时,在该字段“删除”单元格中显示“Where”,表示要删除哪些记录。在该字段的“条件”单元格中输入条件:<60。设计视图结果如图5.27所示。
图5.27 删除查询设计视图
(5)
单击工具栏上的“视图”按钮,可以先预览要删除的记录,若不是要删除的记录,可以返回查询设计视图,修改查询条件;若是要删除的记录,可以单击工具栏上的“运行”按钮,这时系统打开“确认删除”对话框,单击“是”按钮,将从成绩表中永久删除查询到的记录。
【例5.16】 创建删除查询,删除指定
年级
六年级体育公开课教案九年级家长会课件PPT下载六年级家长会PPT课件一年级上册汉语拼音练习题六年级上册道德与法治课件
学生的记录。
主要设计步骤如下:
(1)
打开查询设计视图,将“学生”表添加到窗口中。
(2)
单击“查询类型”按钮,从下拉菜单中选择“删除查询”命令。这时,查询设计视图中添加了一个“删除”行。
(3)
双击“学生”字段列表中的“*”字段,“学生.*”被添加到“字段”行上,同时,在该列“删除”单元格中显示“From”;在“字段”行的第二列中输入:Mid([学号],4,2) ,在该列的“条件”单元格中输入:[输入要删除的班级:]。
设计视图结果如图5.28所示。
图5.28 删除查询设计视图
比较例5.15和例5.16的执行结果,用户可以加深认识选择“级联删除相关记录”的含义。在第一个例子中,仅把“成绩”表中选课成绩在60分以下的记录删除,不影响“学生”表的数据记录,而第二个例子中,从“学生”表中删除某个班级的学生记录,则会同时删除“成绩”表中这些学生的选课记录。
3.
创建追加查询
生成表查询用查询选择的字段创建新表结构,然后写入查询记录。而追加查询是对原数据库表进行追加记录的操作,它提供了一个不用到表中就可以增加记录的方法。
【例5.17】 假定在“学生管理”数据库中,建有一个“大型数据库技术”成绩表,存放着本学期该门课的考试成绩,其中含有:学号、姓名和分数字段。现在,要利用追加查询将其数据记录追加到“成绩”表中。
主要操作步骤如下:
(1)
打开查询设计视图,将“大型数据库技术”表添加到窗口中。
(2)
单击“查询类型”按钮,从下拉菜单中选择“追加查询”命令。系统会弹出“追加”对话框,如图5.29所示。在“表名称”中输入要追加记录的表:成绩,单击“确定”按钮,这时,查询设计视图中就添加了一个“追加到”行。
(3)
设置需要追加到目标表的各个选项,在“追加到”一栏中选择目标表对应的字段,设计视图结果如图5.30所示。
(4)
单击“视图”按钮,可以查看要追加的记录。确认无误后,单击“运行”按钮,系统会弹出追加记录提示框,单击“是”按钮,将选择记录追加到目标表中。
图5.29 “追加”对话框
图5.30 追加查询设计视图
需要说明的是:由于在“大型数据库技术”表中没有“课程号”字段,因此可以使用表达式“8”(该门课的课程号)为“成绩”表中的“课程号”字段赋值。
一般情况下,把追加表的字段拖到“字段”行后,系统会自动在“追加到”行给出相对应的字段,也可以选择要追加到的对应字段。
4.
创建更新查询
更新查询可以改变表中记录的数据值。当需要用相同表达式更新许多记录的字段值时,这种查询是很有用的。例如,需要按固定的比率增加或者降低所有产品或某一类特定产品的单位价格等。
要更新的记录就是查询中通过设置条件所查询到的记录。
【例5.18】 在成绩表中,把所有选课成绩不及格的“成绩”字段值置为0。
主要设计步骤如下:
(1)
打开查询设计视图,将“成绩”表添加到窗口中。
(2)
单击“查询类型”按钮,从下拉菜单中选择“更新查询”命令,这时,查询设计视图中添加了一个“更新到”行。
(3)
单击“成绩”字段列表中的“成绩”字段,并将其拖到“字段”行的第1列上,在“更新到”一行输入数值:0,在“条件”行输入更新条件:<60。设计视图结果如图5.31所示。
(4)
单击“视图”按钮,可以查看要更新的记录。确认无误后,单击执行查询按钮,系统会弹出更新提示框,单击“是”按钮,将完成对成绩表中选课成绩不及格记录的“成绩”字段更新。
图5.31 更新查询设计视图
5.4.5 重复项、不匹配项查询
1.
创建查找重复项查询
查询数据表中字段值重复的记录。在数据表中,除设置为主键的字段不能重复外,其他字段允许有重复值。
在Access 2003中,可能需要对数据表中某些具有相同值的记录进行检索、分类。利用系统提供的“查找重复项查询向导”可以快速完成一个查找重复项查询。
创建查找重复项查询的步骤如下:
(1)
在“新建查询”对话框中,选择“查找重复项查询向导”,并在向导对话框中选择查询所基于的表或查询,例如,选择“成绩”表,以查询每门课被学生选修的情况。
(2)
选取设为重复值的字段,系统会按照选取的字段自动对数据表中的记录进行检索,如选择“课程号”。
(3)
可以选择另外查询的字段。
(4)
为查询指定一个名字后,单击“完成”按钮,即完成查找重复项查询的建立。
2.
建立不匹配查询
不匹配查询就是在一个表中搜索另一个表中没有相关记录的记录行。在Access 2003中,可能需要对数据表中的记录进行检索,查看它们是否与其他表的记录相关,是否真正具有实际意义。
建立不匹配查询的步骤如下:
(1)
在“新建查询”对话框中,选择“查找不匹配项查询向导”,并在向导对话框中选择查询所基于的表或查询,例如,选择“课程”表,以查询没有被学生选修的课程有哪些。
(2)
选择不包含匹配记录的表,在此,选择“成绩”表。
(3)
选择在两个表中的匹配字段,在此选择“课程”和“成绩”表的“课程号”字段。
(4)
为查询指定一个名字后,单击“完成”按钮,即完成查找不匹配项查询的建立。
5.5 SQL 查 询
SQL是结构化查询语言(Structured Query Language)的缩写。SQL包括数据定义、数据查询、数据操纵和数据控制4个部分,是一种功能齐全的数据库语言。该语言于20世纪70年代就由Boyce和Chamberlin提出,在IBM大型计算机上实现(当时称为SEQUEL语言)。由于SQL具有语言简洁、方便实用、功能齐全等突出优点,很快得到推广和应用。
SQL有两种使用方法,一种是以与用户交互的方式联机使用,另一种是作为子语言嵌入到其他程序设计语言中使用。
5.5.1 SQL的数据定义
SQL的数据定义功能是指定义数据库的结构,包括定义基本表、定义视图和定义索引3个部分。由于视图是基于基本表的虚表,索引是依附于基本表的,因此SQL通常不提供修改视图定义和修改索引定义的操作。如果想修改视图定义或索引定义,只能先将它们删掉,然后再重建,不过有些产品如Oracle允许直接修改视图定义。
SQL数据定义语句如表5.1所示。
表5.1 SQL的数据定义语句
操作对象
操 作 方 式
创 建
删 除
修 改
表
CREATE TABLE
DROP TABLE
ALTER TABLE
视图
CREATE VIEW
DROP VIEW
索引
CREATE INDEX
DROP INDEX
1.
定义基本表
建立数据库的第一步就是定义基本表。
定义基本表的命令为CREATE TABLE,其格式如下:
CREATE TABLE <表名> (<列名1><数据类型>[列级完整性约束条件]
[,<列名2><数据类型>[列级完整性约束条件]……]
[,<表级完整性约束条件>]);
其中,<表名>是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中的数据时,由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级,也可以定义在表级。
【例5.19】 建立一个“学生”表,它由学号、姓名、性别、年龄和所在系5个属性组成,其中学号属性不能为空,并且其值是唯一的。
CREATE TABLE 学生(学号 CHAR(5) NOT NULL UNIQUE,
姓名 CHAR(8),
性别 CHAR(2),
年龄 INT,
所在系 CHAR(15));
其中NOT NULL表示该列不能为空值,UNIQUE表示该属性值唯一。
2.
修改基本表
由于应用环境和应用需求的变化,有时可能需要修改已建立好的基本表,包括增加新列、增加新的完整性约束条件、修改原有的列定义或删除已有的完整性约束条件等。
修改基本表的命令为ALTER TABLE,其格式为:
ALTER TABLE <表名>[ADD<新列名><数据类型>[完整性约束]]
[DROP<完整性约束>]
[MODIFY<列名><数据类型>];
【例5.20】 在学生表中增加“入学时间”列,设置其数据类型为日期型。
ALTER TABLE 学生 ADD 入学时间 DATE;
【例5.21】 将学生表中的年龄的数据类型改为半字长整数。
ALTER TABLE 学生 MODIFY 年龄 SMALLINT;
【例5.22】 删除学生表中学号必须取值唯一的约束。
ALTER TABLE 学生 DROP UNIQUE(学号);
SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先将原表中要保留的列及其内容复制到一个新表中,然后删除原表,并将新表重命名为原表名。
3.
删除基本表
可用DROP TABLE命令删除基本表,其格式为:
DROP TABEL <表名>;
【例5.23】 删除学生表。
DROP TABLE 学生;
基本表一旦删除,表中的数据和在此表上建立的索引都将自动被删掉,而建立在此表上的视图虽然仍然保留,但已无法引用。
5.5.2 SQL的数据操纵
数据操纵是指对表中的数据进行查询、插入、删除和更新等操作。
1.
SQL查询
SELECT查询是数据库的核心操作。
其命令格式为:
select [ALL | DISTNCT] <目标列表达式1>[,<目标列表达式2>]……
from <表名或视图名列表>
[where <条件表达式>]
[group by <分组属性名> [having<组选择条件表达式>]]
[order by <排序属性名> ] [asc|dEsc];
SELECT语句的含义是,从指定的表或视图中找出符合条件的记录,按目标列表达式的设定,选出记录中的字段值形成查询结果。
说明:<目标列表达式>:要查询的数据,一般是列名或表达式。
from 子句:数据来源,即从哪些表或视图中查询。
where子句:查询条件,即选择满足条件的记录。
group by子句:对查询结果进行分组。
having子句:限定分组的条件,必须在group by子句后用。
order by子句:对查询结果进行排序,ASC表示升序,DESC表示降序。
我们以一个简单的图书管理关系数据模型为基础,通过示例来介绍SELECT语句的使用方法。
设图书管理关系数据模型包括以下3个关系模式:
图书(总编号,分类号,书名,作者,出版单位,职称,地址)。主码为总编号。
读者(借书证号,姓名,性别,单位,职称,地址)。主码为借书证号。
借阅(借书证号,总编号,借阅日期,备注)。主码为(借书证号,总编号,借阅日期),外码为借书证号和总编号。
(1)
简单查询
【例5.24】 找出读者李欣所在的单位。
SELECT 姓名,单位
FROM 读者
WHERE 姓名= "李欣";
【例5.25】 查看所有读者的全部情况。
SELECT *
FROM 读者;
其中SELECT子句中的“*”表示所有属性。
【例5.26】 列出馆中所有藏书的书名及出版单位。
SELECT DISTINCT 书名,出版单位
FROM 图书;
DISTINCT选项 用于从查询结果中去掉重复元组。系统默认为ALL,即无论重复与否全部给出。
【例5.27】 查找清华大学出版社的所有图书及单价,结果按单价降序排列。
SELECT 书名,出版单位,单价
FROM 图书
WHERE 出版单位= "清华大学出版社"
ORDER BY 单价 DESC;
【例5.28】 查找价格在10元到15元之间的图书,结果按分类号和单价升序排列。
SELECT 书名,作者,单价,分类号
FROM 图书
WHERE 单价 BETWEEN 10 AND 15
ORDER BY 分类号,单价 ASC;
【例5.29】 查找清华大学出版社和科学出版社的所有图书及作者。
SELECT 书名,作者,出版单位
FROM 图书
WHERE 出版单位 IN(“清华大学出版社”,“科学出版社”);
【例5.30】 查找书名以“数据库”打头的所有图书及作者。
SELECT 书名,作者
FROM 图书
WHERE 书名 LIKE "数据库%";
(2)
联接查询
简单查询只涉及一个关系,如果查询涉及两个或几个关系,往往要进行联接运算。由于SQL是高度非过程化的,用户只要在FROM子句中指出关系名称,在WHERE子句中写明联接条件即可,联接运算由系统完成并实现优化。
【例5.31】 查找所有借阅了图书的读者的姓名及所在单位。
SELECT DISTINCT 姓名,单位
FROM 读者,借阅
WHERE 读者.借书证号=借阅.借书证号;
必须注意,如果不同关系中有相同的属性名,为了避免混淆,应当在前面冠以关系名并用“.”分开。
【例5.32】 查找李晶借的所有图书的书名及借阅日期。
SELECT 姓名,书名,借阅日期
FROM 图书,借阅,读者
WHERE 读者.借书证号=借阅.借书证号
AND 借阅.总编号=图书.总编号
AND 姓名="李晶";
查询涉及3个关系之间的自然联接,用户只需用外码指出联接条件。
(3)
嵌套查询
嵌套查询是指在SELECT-FROM-WHERE查询块内部再嵌入另一个查询块,称为子查询,并允许多层嵌套。由于ORDER子句是对最终查询结果的表示顺序提出要求,因此它不能出现在子查询中。
【例5.33】 找出借阅了“C语言程序设计”一书的读者的姓名及所在单位。
此查询可以用联接查询来完成:
SELECT 姓名,单位
FROM 读者,借阅,图书
WHERE 读者.借书证号=借阅.借书证号
AND 借阅.总编号=图书.总编号
AND 书名="C语言程序设计";
对于非专业用户来讲,WHERE子句中的条件可能过于复杂,往往容易丢掉一部分联接条件。下面的嵌套查询形式则清晰、自然,并可体现出结构化程序设计的优点:
SELECT 姓名,单位
FROM 读者
WHERE 借书证号 IN
(SELECT 借书证号
FROM 借阅
WHERE 总编号 IN
(SELECT 总编号
FROM 图书
WHERE 书名="C语言程序设计"));
在执行嵌套查询时,先对内层子查询求结果,外层使用内层的查询结果。从形式上看是自下向上进行处理的,从这个规律出发,按照手工查询的思路来组织嵌套查询就会显得很简单。
在嵌套查询中最常用的是IN。由于外层查询使用内层查询的结果,用户事先并不知道内层结果,因此这里的IN就不能用一系列OR来代替。另处,并非所有的嵌套查询都能用联接查询替代,有时结合使用更简洁、方便。
【例5.34】 找出与王鸣一在同一天借了书的读者的姓名、所在单位。
SELECT 姓名,单位,借阅日期
FROM 读者,借阅
WHERE 借阅.借书证号=读者.借书证号 AND 借阅日期 IN
(SELECT 借书日期
FROM 借阅,读者
WHWRE 借阅.借书证号=借书证号 AND 姓名="王鸣一");
(4)
使用聚函数查询
SQL提供的常用统计函数称为聚函数。这些聚函数使检索功能进一步增强,它们的自变量是表达式的值,是按列计算的,最简单的表达式就是字段名。
SQL的聚函数有:
· COUNT:计算元组的个数。
· SUM:对某一列的值求和(属性必须是数值类型)。
· AVG:对某一列的值求平均值(属性必须是数值类型)。
· MAX:找出一列值中的最大值。
· MIN
:找出一列值中的最小值。
【例5.35】 计算藏书总册数。
SELECT COUNT(*) AS 藏书总册数
FROM 图书;
【例5.36】 查询清华大学出版社图书的最高价格、最低价格和平均价格。
SELECT MAX(单价),MIN(单价),AVG(单价)
FROM 图书
WHERE 出版单位= "清华大学出版社";
【例5.37】 查询各个出版社图书的最高价格、最低价格和平均价格。
SELECT 出版单位,MAX(单价),MIN(单价),AVG(单价)
FROM 图书
GROUP BY 出版单位;
其中GROUP BY 的作用是按属性的取值对记录分组,然后对每一组分别使用聚函数。在此例中,有几个出版单位就分几个组,按组分别计算最高价格、最低价格和平均价格。
需要注意的是:如果在SELECT子句中出现聚函数,与之并列的其他项目必须也是聚函数或者是GROUP BY的对象,否则会出现逻辑错误。
【例5.38】 找出当前至少借阅了5本图书的读者的姓名及其所在单位。
SELECT 姓名,单位
FROM 读者
WHERE 借书证号 IN
(SELECT 借书证号
FROM 借阅
GROUP BY 借书证号 HAVING COUNT(*)>=5);
例中的HAVING子句通常跟随在GROUP BY之后,其作用是限定检索条件。条件中必须包含聚函数,否则条件可直接放到WHERE子句里。
(5)
集合查询
使用UNION可以把多个SELECT语句的结果进行并操作。
【例5.39】 查询计算机系的学生及年龄不大于20岁的学生。
SELECT 学号,姓名
FROM 学生
WHERE 系别="计算机系"
UNION
SELECT 学号,姓名
FROM 学生
WHERE YEAR(DATE())-YEAR([出生日期])<=20;
使用UNION将多个查询结果合并起来时,系统会自动去掉重复元组。需要注意的是:参加UNION操作的各查询结果的列数必须相同;对应的数据类型也必须相同。
2.
插入操作
使用INSERT语句可以向基本表中插入数据,通常有两种使用形式,一种是插入一个元组,另一种是插入子查询结果,后者可以一次插入多个元组。
(1)
插入单个元组
语句格式为:
INSERT INTO <表名>[(<属性1>,<属性2>,…)]
VALUES (<常量1>,<常量2>,…)
其功能是将新元组插入指定表中,其中新元组属性1的值为常量1,属性2的值为常量2,以此类推。
如果某些属性列在INTO子句中没有出现,则新元组在这些列上将取空值。
如果INTO子句中没有指明任何列名,则新插入的元组必须在每个属性列上均有值。
但必须注意的是:在表定义时说明了NOT NULL的属性列不能取空值。
【例5.40】 向图书(总编号,分类号,书名,作者,出版单位,单价)表中新加一个元组。
INSERT INTO 图书
VALUES (“446943”,“TP31/138”,“微机原理”,“杨大华”,“清华大学出版社”,17.10);
【例5.41】 向图书表中插入一个元组的部分属性。
INSERT INTO 图书(总编号,书名,单价)
VALUES (“44698088”,“数据库原理及应用”,16.50);
(2)
插入子查询结果
语句格式为:
INSERT INTO <表名>[(<属性1>,<属性2>,…)]
子查询;
其功能是批量插入,一次将子查询的结果全部插入指定表中。
【例5.42】 建立一个各单位借阅图书情况的统计表,名称为DWJS,每隔一段时间,如一个月,向此表里追加一次数据。
CREATE TABLE DWJS (单位 CHAR(20),
借书人数 SMALLINT,
借书人次 SMALLINT);
INSERT INTO DWJS (单位,借书人数,借书人次)
SELECT 单位,COUNT(DISTINCT 借书证号),COUNT(总编号)
FROM 借阅,读者
WHERE 读者.借书证号=借阅.借书证号
GROUP BY 单位;
3.
删除记录
使用DELETE命令可以从表中删除一个或多个元组。
删除元组的格式为:
DELETE
FROM <表名>
[WHERE <条件>]
【例5.43】 删除借书证号“9011100”所借总编号为“44698080”的借阅登记。
DELETE
FROM 借阅
WHERE 借书证号= "9011100 " AND 总编号= "44698080 ";
【例5.44】 删除借书证号以90开头的所有读者登记和借阅登记。
DELETE
FROM 读者
WHERE 借书证号= "90% ";
DELETE
FROM 借阅
WHERE 借书证号= "90% ";
4.
更新操作
更新操作又称修改操作。在更新命令中可以用WHERE子句限定条件,对满足条件的元组给以更新,若不写条件,则对所有元组更新。
更新命令的格式为:
UPDATE<表名>
SET <属性名1>=<表达式1>[,<属性名2>=<表达式2>…]
[WHERE <条件>];
其功能是修改指定表中满足条件的元组,用表达式1的值替代属性名1的值,用表达式2的值替代属性名2的值,以此类推。
【例5.45】 将总编号为“44698088”的图书填上作者和出版单位。
UPDATE 图书
SET 作者= "王为民",出版单位= "电子工业出版社"
WHERE 总编号= " 44698088 ";
【例5.46】 将所有图书的单价上调5%。
UPDATE 图书
SET 单价=单价*1.05;
5.5.3 SQL视图
任何类型的查询都可以在SQL视图中打开,通过修改查询的SQL语句,就可以对现有的查询进行修改使之满足用户的要求。
例如,将已建立的“计算机科学与技术专业或者2004年入学的学生”查询的条件改为“计算机应用与维护专业或者2005年入学的学生”。
主要操作步骤如下:
(1)
在“设计”视图中打开已建立的查询,结果如图5.32所示。
(2)
选择“视图”菜单下的“SQL视图”命令,或单击工具栏上“视图”按钮的下三角按钮,从下拉列表中选择“SQL视图”,这时系统打开如图5.33所示的SQL视图窗口。
(3)
在SQL视图窗口中,可以直接修改WHERE子句后面的条件,例如,把专业条件中的“计算机科学与技术”改为“计算机应用与维护”;把入学日期条件中的年度值“2004”改为“2005”,结果如图5.34所示。
(4)
单击工具栏上的“视图”按钮,可以预览查询的结果。单击“保存”按钮,可以保存此次通过SQL视图对查询所作的修改。
图5.32 查询设计视图
图5.33 SQL视图
图5.34 修改后的SQL视图
切换和对比查询视图的设计视图和SQL视图,可以帮助用户掌握SQL语句的使用,反过来,也可以提高用户在设计视图中建立查询条件的能力。
习 题
1.
查询的功能是什么?查询与表有何不同?
2.
在Access 2003中,查询分为几种类型?各具有什么功能?
3.
什么是操作查询?分为几类?
4.
什么是参数查询?其特点是什么?
5.
简述利用设计视图创建选择查询的步骤。
6.
简述利用设计视图创建交叉表查询的步骤。
7.
简述利用设计视图创建参数查询的步骤。
8.
简述创建生成表查询和删除查询的步骤。
9.
使用SQL语句创建新表。
10.
使用SQL语句修改新表结构。
11.
使用SQL语句向新表中插入数据记录。
12.
使用SQL语句删除表中已有的数据记录。
13.
使用SQL语句修改表中已有的数据。
14.
使用SQL语句创建基于多表的查询。
_1217497240.doc
新对象
生成器
数据库窗口
属性
上限值
合计
显示表
运行
查询类型
视图