第八章查询与视图问题的提出:•当我们为应用程序创建了大量的数据表后,如何对这些表进行处理得到我们所需要的信息?解决问题的方法:•在VisualFoxPro6.0中,常常利用视图和查询来对收集的数据进行处理,得到有用的信息。第八章查询与视图本章主要介绍的内容有:•VisualFoxPro6.0查询设计方法;•VisualFoxPro6.0视图设计方法。通过学习本章内容,您能够做到:•学会利用查询与视图设计器建立查询与视图;•了解利用SELECT-SQL建立查询。本章目录•8.1引例•8.2查询与视图•8.3查询的建立•8.4视图的建立HOME8.1引例•现有学生档案数据表xsda.dbf,现在要把其中班级为“机制991”的学生筛选出来,查看他们的“Xh”、“Xm”、“Xi”、“Bj”、“Rxf”等信息,并且按“Rxf”升序排列输出,查询结果如下图所示。利用视图输出满足条件的结果利用查询输出的满足条件的结果8.2查询与视图•利用查询和视图都可以从我们收集的数据中提取所需的信息,为了能很好地使用查询和视图,这一节来首先介绍查询和视图的概念和二者的区别。8.2查询与视图•8.2.1查询•8.2.2视图•8.2.3查询与视图的区别8.2.1查询•查询是向数据库发出检索信息的请求,它通过限制一些条件而从数据库中提取特定的信息。查询可以扩充用户控制数据的能力,可以让用户按需要的方式显示表中的信息。查询能单独以扩展名为.QPR的文件保存,可以在命令方式下使用,可以选择查询去向,但不能更新和修改数据,而且只能一次性使用,只能访问本地数据。查询的去向有七种:“浏览”、“临时表”、“表”、“图形”、“屏幕”、“报表”、“标签”。8.2.2视图•视图是一个类似于目录的有关数据的虚拟表或者逻辑表,视图中的数据来源于数据库中的表或者其他视图。它具有普通表的一般性质,可以对它进行浏览、修改和使用。值得一提的是利用视图修改的结果可以送回数据源,进行永久的保存。但视图依赖于数据库而存在,在新建视图之前,必须先打开相关数据库。视图和查询也很相似,都可以从一个或多个相关联的表中提取有用的信息。8.2.3查询与视图的区别•视图和查询之间也有着本质的区别。(1)利用查询设计器生成的是.QPR文件,它是完全独立的,不依赖于任何数据库和表而存在,而视图则依赖于数据库而存在。(2)利用查询不能更新数据源,而利用视图可以更新数据源。(3)查询的去向有七种,而视图只是一个虚拟的表。8.3查询的建立•建立查询之前应明确以下几点:(1)确定数据源(2)确定查询条件(3)确定查询去向•查询的建立方法有以下三种:(1)利用向导建立查询(2)利用设计器建立查询(3)使用SQL-Select命令建立查询8.3查询的建立•8.3.1利用向导建立查询•8.3.2使用查询设计器建立查询•8.3.3使用SQL-Select命令建立查询•8.3.4查询结果的输出8.3.1利用向导建立查询•步骤如下:①选”文件“菜单中“新建”菜单项→“文件类型”选“查询”→单击“向导”→打开查询向导选取对话框→选“交叉表查询”→打开“交叉表查询”向导。②在查询向导中数据源选xscj表并选取该表的所有字段。③将“xh”字段作为行、“kcdm”字段作为列、“cj”作为数据,分别将字段拖到相应的位置。④对每行求和。•⑤选保存并运行交叉表查询,输入文件名将文件以.qpr保存。8.3.2使用查询设计器建立查询•使用查询设计器建立对两个表的查询过程如下:(1)启动查询设计器(2)更改联结条件(3)查询字段的设置(4)筛选记录(5)排序记录(6)建立分组查询8.3.3使用SQL-Select命令建立查询•查询可以利用查询向导或查询设计器来建立,也可以在命令窗口中输入SQL-Select命令建立查询,SQL-Select命令格式如下:SELECT[ALL|DISTINCT];[表名.]SELECT表达式[AS列标题][,[表名.]SELECT表达式[AS列标题]……];FROM[数据库名!]表名[,[数据库名!]表名……];[[INNER|LEFT|RIGHT|FULL]JOIN[数据库名!]表名ON关联条件……][INTO去向];[WHERE筛选条件[AND|OR筛选条件……]];[GROUPBY分组项[,分组项……]];[ORDERBY排序项[ASC|DESC][,排序项[ASC|DESC]……]]示例我们看一条SQL-Select命令SELECT*;FROMxj!xjbINNERJOINxj!xscjb;ONXjb.学号=Xscjb.学号;WHEREXscjb.数学60;ANDXscjb.英语70;GROUPBYXjb.班级;ORDERBYXjb.学号;INTOCURSOR查询1•命令的功能是:以数据库xj中的数据表xjb和xscjb为数据源建立查询,要求根据学号建立二表之间的内部联接,选取二表中的所有字段输出,输出的记录为满足联接条件的且“数学60”、“英语70再看一条SQL-Select命令SELECTXjb.学号,Xjb.姓名,Xjb.性别,Xjb.班级,Xjb.出生年月,Xjb.籍贯,;Xscjb.考试时间,Xscjb.数学,Xscjb.语文,Xscjb.英语,Xscjb.化学,Xscjb.平均分,;Xscjb.总分;FROMxj!xjbINNERJOINxj!xscjb;ONXjb.学号=Xscjb.学号;WHEREXscjb.数学60;ANDXscjb.英语70;GROUPBYXjb.班级;ORDERBYXjb.学号DESC;INTOTABLE查询1.dbf•命令的功能是:以数据库xj中的数据表xjb和xscjb为数据源建立查询,要求根据学号建立二表之间的内部联接,选取二表中的“Xjb.学号”、“Xjb.姓名”、“Xjb.性别”、“Xjb.班级”、“Xjb.出生年月”、“Xjb.籍贯”、“Xscjb.考试时间”、“Xscjb.数学”、“Xscjb.语文”、“Xscjb.英语”、“Xscjb.化学”、“Xscjb.平均分”、“Xscjb.总分”等字段输出,输出的记录为满足联接条件的且“数学60”、“英语708.3.4查询结果的输出•前面曾提过查询去向需要设置,下面我们就来看看查询去向的设置方法。•查询去向有七种,如下图所示。单击下图中的命令按钮,选取所需的查询去向。查询去向对话框8.4视图的建立•建立视图的目的是为了能够方便地从表中众多的记录中找到我们所需的记录。视图有二种:本地视图和远程视图。本地视图是指以本地表或其它本地视图做为数据源而创建的视图。远程视图是指以远程数据表或远程视图做为数据源而创建的视图。在这里我们只介绍本地视图的建立方法。•视图可以利用视图设计器建立,也可以利用向导建立。8.4视图的建立•8.4.1利用向导建立视图•8.4.2利用视图设计器建立视图•8.4.3创建多表视图•8.4.4视图的修改与删除•8.4.5视图的作用8.4.1利用向导建立视图•利用向导建立视图的过程如下:(1)打开数据库:因为视图是依赖数据库而存在的,所以在建立视图之前一定先要打开数据库。(2)进入视图向导,如下图所示。(3)利用视图向导建立本地视图•设计过程如下:①打开xsda.dbc数据库设计器(如果库不存在应该先建立数据库)。②打开“数据库”菜单,选取“数据库”菜单中的“新建本地视图”,调出视图向导对话框。③从“可用字段”列表框中选取视图中所需的字段到“选定字段”列表框中,如下图所示。④单击下一步,弹出下图所示的“筛选记录”对话框。设置筛选条件⑤单击的下一步按钮,弹出下图所示的“排序记录”对话框。选定xsda.Rxf字段做为排序字段,并设其按升序排序。这是排序字段在这里确定升序排序⑥单击下一步按钮,弹出下图所示的“限制记录”对话框。⑦单击下一步按钮,弹出下图所示的“完成”对话框。⑧选择“保存视图并浏览”后,单击“完成”,弹出下图窗口。窗口中有一文本框,输入视图的名称“xsda”,然后单击“确定”按钮,到这里一个视图就建立了。8.4.2利用视图设计器建立视图•通过本地视图向导建立视图虽然方便、快捷,但最终还依赖视图设计器进行修改,而且利用视图设计器来建立用户数据库视图,更能发挥视图设计器潜在的设计能力。8.4.3创建多表视图•上一节介绍了视图的建立方法,阐明了一个表JSDA为数据源建立视图的过程,但在实际中经常会出现利用视图对多个表进行查询。下面利用视图设计器来建立以JSDA表和KCSZ表为数据源的视图。8.4.4视图的修改与删除1.视图的修改•视图的修改在视图设计器中进行,其操作步骤如下:①打开待修改视图所在的数据库设计器(MODIFYDATABASE库名);②打开视图设计器。单击打开的数据库中待修改视图,选取“数据库”菜单中的“修改”菜单项(或用MODIFYVIEW视图名),打开“视图设计器”,如下图所示。在这里就可以对设计过的视图根据需要进行修改。2.视图的删除为了重新组织和管理数据,经常要删除一些无用的视图。删除视图的步骤如下:①打开待修改视图所在的数据库设计器(MODIFYDATABASE库名);②单击打开的数据库中待删除的视图;③选取“数据库”菜单中的“移去”菜单项,弹出如下图所示对话框;④单击下图中的“移去”,就删除了视图。(DELETEVIEW视图名)。8.4.5视图的作用•视图建立以后,就可以使用它来显示和更新数据。下面我们就来看视图的使用情况。1.利用视图可以快速查找信息2.利用视图更新数据3.视图可以作为数据源