VFP的查询是从一个或多个相关的数据表中提取用户所需的数据,并可按指定的顺序、分组与去向等进行输出。建立查询的方法:1)查询向导2)查询设计器(P172-178)3)SQL查询命令返回第9章视图与查询操作一、使用“查询设计器”进行查询的基本步骤:1)打开“查询设计器”窗口2)指定被查询的数据表3)选择出现在查询结果中的字段4)设置查询条件5)设置排序或分组来组织查询结果6)指定查询结果的输出方向7)建立查询文件(.qpr),保存查询设置8)运行查询例如:在“教学管理”数据库中,查询数据结构成绩在80分以上的女同学,并按数据结构成绩从低到高的顺序输出其学号,姓名和成绩。操作步骤:1)打开“教学管理”数据库2)创建查询:“数据”选项卡——“查询”选项3)在打开的“查询设计器”进行相关设置。A)添加表或视图B)选取输出的字段C)设置筛选条件D)设置排序依据E)保存查询设置F)执行查询例2:在教学数据库中,分组查询男生的数据结构平均成绩,女生的数据结构平均成绩。具体操作步骤:1)打开“教学管理”数据库2)建立查询,打开“查询设计器”3)“字段”选项卡设置。“性别”字段,“表达式”4)“分组依据”选项卡设置5)保存查询6)运行查询返回视图的建立与维护(P148-152)一、视图的定义二、视图的分类三、视图的特点(优点)四、视图的创建返回一、视图的定义视图是在数据表的基础上创建的一种虚拟表。视图中的数据是按照用户指定的条件从已有的数据库表或其他视图中抽取而来,这些数据在数据库中并不另加存储,而是仅在该数据库的数据字典中存储这个视图的定义。视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。1、某个视图一旦被定义,就成为数据库中的一个组成部分,具有与普通数据库表类似的功能。2、可以像数据库表一样接受用户的访问。3、视图只能依赖于某一个数据库而存在,并且只有在打开相关的数据库后,才能创建和使用视图。4、用户可以通过视图从单个或多个数据库表中提取所需的数据。5、可以通过视图来更新数据库表中的数据。说明:返回二、视图的分类本地视图:直接从本地计算机的数据库表或其他视图中提取数据。远程视图:可从支持开放数据库连接(ODBC)的远程数据源(例如网络服务器)中提取数据。三、视图的优点提供数据库使用的灵活性减少用户对数据库物理结构的依赖。可支持网络应用。视图与查询的比较;1、功能不同:视图可以更新记录内容并返回源表,而查询中记录数据不能被修改。2、从属不同:视图必须从属于某一个数据库,而查询是一个独立的文件,它不从属于某一个数据库。3、访问范围不同:视图可以访问本地数据源,又可以访问远程数据源,而查询只能访问本地数据源。4、输出方式不同:视图只能输出到数据表中,而查询有多种输出方式。返回四、视图的建立(一)、用视图设计器创建视图。(二)、利用SQL命令创建视图。使用“视图设计器”进行视图的创建的基本步骤:1)打开“视图设计器”窗口2)指定创建视图的数据表3)选择出现在视图中的字段4)保存“视图”设计5)运行视图例1、建立一个本地视图,该视图是关于计算机系学生的基本信息。具体实现的方法如下:1、打开“教学数据库”2、打开“视图设计器”3、在“视图设计器”中进行相关设计:1)添加表或视图2)设计视图中的字段3)设置筛选的条件4)设置更新条件5)保存视图6)运行视图例2:创建一个本地视图,该视图主要包含以下信息:学生的学号,姓名,系名称,系主任。返回clearsetdefatof:\temp\datausestindexonalltrim(姓名)+alltrim(DTOC(出生日期))tagxmdatebrowse********************************setordertoxminput请输入姓名toxseekxiffound()dispelse?没有符合条件的记录endifindexon出生日期tagcrinput请输入出生日期toyseek(y)iffound()dispelse?没有符合条件的记录endif*****************setordertoxmdatebrowseseekx+dtoc(y)iffound()dispelse?没有符合该条件的记录endifuse二、利用SQL——SELECT语句进行查询。SELECT目标子句FROM范围子句[WHERE条件子句][GROUPBY分组子句][ORDERBY排序子句]例如:假设在某教学数据库中有以下三个表student(学号,姓名,性别,年龄,系代号)sc(学号,课程代号,成绩)course(课程代号,课程名,任课教师)1、查询年龄在20至23岁的学生的姓名、系代号和年龄。select姓名,系代号,年龄;fromstudent;where年龄between18and23;2、查询选修了01或02或04课程的学生的学号。selectdistinct学号;fromsc;where课程号in('01','02','04');3、查所有姓张的学生的姓名、学号和性别。select学号,姓名,性别;fromstudent;where姓名like'张%';4、查询选修了课程的学生人数。selectcount(*);fromsc;5、查询选修了01号课程平均分,最高分,最低分。selectavg(成绩),max(成绩),min(成绩);fromsc;where课程号='01';6、查询与张三同学同一系的的女同学的基本信息。select*;fromstudent;where性别='女'and系代号=(select系代号;fromstudent;where姓名='张三');7、查询所有学习了数据结构课程的学生的学号和姓名。selectstudent.学号,姓名;fromstudent,sc,course;where(student.学号=sc.学号);and(sc.课程号=course.课程号);and(课程名='数据结构');8、查询不学02课程的学生姓名。selectdistinct姓名;fromstudent;where学号all(select学号;fromsc;where课程号='02');9、统计每一年龄组选修课程的学生人数。select年龄,count(distinctstudent.学号);fromstudent,sc;wherestudent.学号=sc.学号;groupby年龄;10、统计选修人数为3人以上的课程的平均分、最高分,最低分。select课程号,avg(成绩),max(成绩),min(成绩);fromsc;groupby课程号;havingcount(*)=3;11、找出年龄为18~23岁的学生,并且按年龄由大到小进行排序输出。select*;fromstudent;where年龄between18and20;orderby年龄desc;查询结果的去向:1、查询结果到数组。(ARRAY)2、查询结果到临时表中。(CURSOR)3、查询结果到基本表中。(DBF)4、查询结果到文本文件中。(FILE)select*;fromstudent;where年龄between18and20;orderby年龄desc;intoARRAYA1;LISTMEMORYLIKEA1;1、结果存放在数组中。2、结果存放在临时表中。select*;fromstudent;where年龄between18and20;orderby年龄desc;intocursorA1;browse3、结果放在基本表中。select*;fromstudent;where年龄between18and20;orderby年龄desc;intodbfA1;usea1browse4、结果放在文本文件中。select*;fromstudent;where年龄between18and20;orderby年龄desc;tofileA2.txt;返回