购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

实验二
表之间的关系与简单查询

一、实验目的

(1)理解表之间的一对一、一对多、多对多关系,学会建立、删除关系,了解关系的一些属性完整性规则,级联更新、级联删除。

(2)学会建立简单的查询,练习在查询中更改联接属性,学会在查询中汇总数据。

二、基本知识与操作

(一)  表之间的关系

表必须相互协调,以便检索相关信息。这种协调是通过创建表之间的关系来实现的。关系数据库的工作方式是:使每个表的键字段(主键或外键)中的数据与其他表中的数据匹配。大多数情况下,这些匹配字段是一个表中的主键,并且是其他表中的外键。例如,通过在“学生信息”表的“学号”字段和“选课信息”表的相同字段之间创建关系,可以将学生与选课相关联。

在关系数据库中,表与表之间的关系有三种:

1..一对多的关系

这是最普通的关系。对于表A的每一个记录,表B中有几个记录(可以为0)和它相关;反之,对于表B的每一个记录,表A中至多有一个记录和它相关。例如,对于“学生信息”表的一个学号,在“选课信息”中有多门课程的成绩与之相对应。

2..多对多的关系

在这类关系中,对于表A的每一个记录,表B中有多个记录(可以为0)和它相关,同样,对于表B的每一个记录,表A中有多个记录(可以为0)和它相关。例如,“学生信息”表和“课程信息”表,每个学生可以选择多门课程,每门课程可以有多个学生选修。对于多对多的关系,需要建立第三个表,把多对多关系转化为两个一对多关系。例如,对于学生表和课程表的多对多关系,增加一个成绩表,转换成为两个一对多关系。

3..一对一关系

在此类关系类型中,对于表A的每一个记录,表B中至多有一个记录和它相关,反之亦然。

在关系性数据库中,大量处理的是一对多关系,也有少量的一对一关系。

(二)  建立表之间关系

在表之间建立“关系”,首先单击“数据库工具”菜单下的“关系”命令,弹出“关系”对话框,上面还有一个“显示表”对话框如图2-1,通过“显示表”对话框可以把需要建立关系的“表”或“查询”加到“关系”对话框中去。

图2-1

将两个表“学生信息”和“选课信息”都选中,单击“添加”按钮把它们都添加到“关系”对话框上,单击“关闭”按钮把“显示表”对话框关闭。以后再需要打开它时,只要在“关系”对话框上单击鼠标右键,选择“显示表”命令就可。

在“关系”对话框中显示出“学生信息”和“选课信息”的字段列表。由于表都是由字段构成的,表之间的关系也由字段来联系。让不同表中的两个字段建立联系以后,表中的其他字段自然也就可以通过这两个字段之间的关系联系在一起了。即在“学生信息”中的“学号”和“选课信息”中的“学号”两个字段之间建立关系就可以了。先在“学生信息”字段列表中选中“学号”项,然后按住鼠标左键并拖动鼠标到“选课信息”中的“学号”项上,松开鼠标左键,这时在屏幕上出现“编辑关系”对话框。

图2-2

这个对话框可以帮助编辑所建立的关系,通过左面的列表框能改变建立关系的两个字段的来源。可以单击“新建。。。”按钮创建新的关系,或者单击“联接类型”为联接选择一种联接类型。单击“创建”按钮,创建关系如图2-3所示。

图2-3

现在在两个列表框间就出现了一条“折线”,将“学生信息”和“选课信息”两个数据表联接在一起。关闭“关系”对话框,并保存对“关系”布局的修改,表间关系就建立了。

(三)  “关系”与“子数据表”

打开“学生信息”表,会发现这个表中增加了一些新的表,它们是“学生信息”的子表,也就是“选课信息”表。

图2-4

在这种“一对多”的情况下,完全可以通过“学生信息”表中的“学号”信息将这两个表的内容都串起来。在主表中的每一个记录下面都会带着一个甚至几个子表中的“选课信息”记录。具有“一对一”关系的两个表之间互为对方的“子表”。

通常在建立表之间的关系以后,Access会自动在主表中插入子表。但这些子表一开始都是不显示出来的。在Access中,让子表显示出来叫作“展开”子数据表,让子表隐藏叫作将子数据表“折叠”。展开的时候方便查阅选课信息,而折叠起来以后又可以比较方便地管理“学生信息”表。

要“展开”子数据表,只要用鼠标单击主表第一个字段前面一格,对应记录的子记录就“展开”了,并且格中的小方框内“加号”变成了“减号”。如果再单击一次,就可以把这一格的子记录“折叠”起来了,小方框内的“减号”也变回“加号”。如果主表很大的话,这样一个一个地“展开”和“折叠”子数据表就显得太麻烦了,Access提供了一种操作方式,它可以快捷“展开”或“折叠”当前数据表的所有子数据表。打开一个带有子数据表的表时,在“开始”菜单中“记录”选项卡中单击“其他”,在下拉菜单中选择“子数据表”,有三个命令“全部展开”“全部折叠”和“删除”。“全部展开”命令可以将主表中的所有子数据表都“展开”,“全部折叠”命令可以将主表中的所有子数据表都“折叠”起来。不需要在主表中显示子数据表的这种方式来反映两个表之间的“关系”时,就可以使用“删除”命令来把这种用子数据表显示的方法删除。但这时两个表的“关系”并没有被删除。如果想恢复在主表上显示“子数据表”的形式,可以先打开主表,例如“学生信息”表,单击“插入”菜单下的“子数据表”命令,弹出“插入子数据表”对话框如图2-5所示。

在列表框中选取“表”→“选课信息”表,然后在“链接子字段”组合框中选取“学号”字段,并在“链接主字段”组合框中选取“学号”字段,单击“确定”按钮就可以在主数据表“学生信息”表中重新插入子数据表“选课信息”表了。必须要注意的是在任何一个数据表中插入子数据表都需要在两个表之间建立“关系”,如果这两个表的“主链接字段”和“子链接字段”之间还没有建立联结,在单击“确定”按钮插入“子数据表”的时候就会询问是否要在这两个表之间建立相应的“关系”。只有建立“关系”以后,才能完成“插入子数据表”过程。用这样的方式在表之间建立“关系”不像在“关系”对话框中建立的“关系”那样直观。所以提倡在“关系”对话框中建立好表与表之间的“关系”,由Access自动地创建子数据表。

图2-5

(四)  创建简单查询

查询是Access中另一个非常重要的内容。在实际工作中使用数据库中的数据时,并不是简单地使用这个表或那个表中的数据,而常常是将有“关系”的很多表中的数据一起调出使用,有时还要把这些数据进行一定的计算以后才能使用。如果再建立一个新表,把要用到的数据拷贝到新表中,并把需要计算的数据都计算好,再填入新表中,就显得太麻烦了,用“查询”对象可以很轻松地解决这个问题,它同样也会生成一个数据表视图,看起来就像新建的“表”对象的数据表视图一样。“查询”的字段来自很多互相之间有“关系”的表,这些字段组合成一个新的数据表视图,但它并不存储任何的数据。当我们改变“表”中的数据时,“查询”中的数据也会发生改变。

数据库查询功能主要可以通过“选择查询”来实现选择查询”就是从一个或多个有关系的表中将满足要求的数据提取出来,并把这些数据显示在新的查询数据表中。而其他的方法,像“交叉查询”、“操作查询”和“参数查询”等,都是“选择查询”的扩展。

创建“选择查询”可以直接用“查询设计视图”来建立新的查询。直接使用查询设计视图建立查询可以帮助理解数据库中表之间的关系,看到要查询的字段之间是如何联系的。

单击“在设计视图中创建查询”后,屏幕上出现“查询”窗口,它的上面还有一个“显示表”对话框。单击“显示表”对话框上的“两者都有”选项,在列表框中选择需要的表或查询。“表”选项卡中只列出了所有的表,“查询”选项卡中只列出了所有的查询,而选择“两者都有”就可以把数据库中所有“表”和“查询”对象都显示出来。

图2-6

单击所需要的表或查询,然后单击对话框上的“添加”按钮,这个表的字段列表就会出现在查询窗口中。将“选课查询”数据库中的“学生信息”表和“选课信息”表都添加到查询窗口中。添加完提供原始数据的表后,就可以把“显示表”窗口关闭,回到“查询窗口”中准备建立“查询”了。

查询窗口可以分为两大部分,窗口的上面是“表/查询显示窗口”,下面是“示例查询设计窗口”,“表/查询显示窗口”显示查询所用到的数据来源,包括表、查询。窗口中的每个表或查询都列出了它们的所有字段。下方的“示例查询窗口”则是用来显示查询中所用到的查询字段和查询准则。

图2-7

现在“表/查询显示窗口”中已有添加的几个表,接下来是往查询设计表格中添加字段,所添加的字段叫作“目标字段”,向查询表格中添加目标字段有两种方法:

第一种方法可以在表格中选择一个空白的列,单击第一行对应的一格,格子的右边出现一个带下箭头的按钮,单击这个按钮出现下拉框,在下拉框中就可以选择相应的目标字段。

第二种方法更简单,例如要添加“学生信息”表中的“学号”字段,就先选中“学生信息”这个表,然后在它的列表框中找到需要的字段“学号”,将鼠标移动到列表框中标有这个字段的选项上,按住鼠标左键,这时鼠标光标变成一个长方块,拖动鼠标将长方块拖到下方查询表格中的一个空白列,放开鼠标左键,这样就完成了将“学生信息”表中的“学号”字段添加到查询表格中了。在“表/查询”窗口中如果有很多对象时,这种方法就比第一种方法显得方便多了。

如果要删除一个目标字段,将鼠标移动到要删除的目标字段所在列的选择条上,光标会变成一个向下的箭头,单击鼠标左键将这一列都选中,敲击键盘上的“DELETE”键,选中的目标字段就被删除了。

把需要的字段都添加到查询中,就可以看看建立“查询”的结果。

查询的数据表视图与表的数据表视图之间有很多差别。在查询数据表中无法加入或删除列,而且不能修改查询字段的字段名。这是因为由查询所生成的数据值并不是真正存在的值,而是动态地从表对象中调来的,是表中数据的一个镜像。查询只是告诉Access需要什么样的数据,而Access就会从表中查出这些数据的值,并将这些数据的值反映到查询数据表中,也就是说这些值只是查询的结果。我们刚才选择目标字段就是告诉Access需要哪些表、哪些字段,而Access会把字段中的数据列成一个表反馈给我们。当然在查询中我们还可以运用各种表达式来对表中的数据进行运算生成新的查询字段。

如果希望数据表计算出学生每门课的“课程学分绩”,可以在查询中使用表达式来计算。先在查询的设计窗口中添加一个目标字段,就是查询数据表中最后的“课程学分绩”字段,因为这个字段不在任何一个表中,所以必须手动将它输入到查询表格的一个空列中。在列的字段行首先输入“课程学分绩”,然后输入“:”(注意必须输入英文模式下的“:”),接着输入“[课程信息]![学分]∗[选课信息]![成绩]”,再切换到查询的数据表视图看看结果,查询新增了“课程学分绩”列,并且自动算出结果。

图2-8

在写计算表达式的时候必须注意它的格式,首先是字段名称,接着是“:”然后是表达式的右边部分,在用到本查询中的目标字段时,必须将字段名用方括号括起来,在字段名前面加上“[所用表的表名]!”符号来表示它是哪个表中的字段。

三、实验内容

(1)将文件“学生信息。xls”和“选课信息。xls”中的数据导入至相应表中。

(2)了解表“学生信息”、“课程信息”、“选课信息”间关系,一个学生可选多个课程,每个课程可被多个学生选中。建立“学生信息”与“选课信息”间关系(一对多),“课程信息”与“选课信息”间关系(一对多)。如图2-9所示。

图2-9

(3)尝试“级联删除相关字段”和“级联更新相关字段”选项的功能。

(4)创建查询命名为“选课1”,添加表“学生信息”、“选课信息”,添加新字段“学号”、“课程代码”。显示所有学生的“学号”(包括没有选课的学生)和已选课学生所选“课程代码”,按照课程代码升序排序。

(5)创建新查询命名为“选课2”,包含表“课程信息”、“学生信息”、“选课信息”,要求查询出已经选过课的学生的“学号”、“课程代码”、“学分”、“成绩”。

(6)在“选课2”查询中汇总每个学生每门课的学分绩,命名为“课程学分绩”。学分绩的算法:课程学分绩=学分∗成绩。

(7)建立查询“选课3”,显示出所有学生(包括未选课的学生)的“学号”、“姓名”、“专业”,已选课学生的所选课程的“课程代码”,“课程名”、“成绩”。如图2-10所示。

图2-10 aubbotodxCXw/9mi75kbfG57oqWMPLPPQaMVtMdKH91R9KaVuH0booID3xu9wDvq

点击中间区域
呼出菜单
上一章
目录
下一章
×