8.1 查询和统计
目的与要求: 通过本次课的学习,掌握数据表查询和数据统计。 | ||
教学内容与时间安排、教学方法: 教学安排: 查询 40分钟 统计 40分钟 教学方法: CAI、图形、表格 | ||
教学重点及如何突出重点、难点及如何突破难点: 教学重点: 表查询、统计 教学难点: 表的查询 | ||
基本内容 |
教学 |
课堂设计 |
5.3查询 对建立的数据表,VFP提供了两种查询的方法:顺序查询和索引查询 一、顺序查询(也称条件定位查询) 【格式】LOCATE [范围] [FOR〈条件〉] [WHILE〈条件〉] 【功能】在当前表文件中按照记录的物理顺序,由上到下依次查找在指定范围内的满足条件的第一条记录(因此可以对查找表不建立索引),若找到(即查找成功),则将记录指针定位到该记录,可用DISP命令或BROWSE命令进行显示。此时FOUND()=.T. (查找成功),若FOUND()=.F. (查找不成功) 说明: 1)若省略范围,系统默认为ALL,此时,若查不到,记录指针定位于最后一个记录的后边(即文件尾),EOF()=.T. ;FOUND()=.F. 2)若指定范围(除ALL外):查不到时,记录指针定位到指定范围的最后一条记录上EOF()=.F.;FOUND()=.F. 3)若在查找前执行了“SET EXACT ON”命令,用LOCATE查找字符串时一定要将字符串写的和库中查找的数据一致,即不能模糊查找 4)当找到一条符合条件的记录时,可用DISPLAY命令进行显示该记录 二、继续查找命令 【格式】CONTINUE 【功能】继续执行LOCATE命令的查找,找到后,将记录指针定位到LOCATE命令中指定条件的下一个记录 说明: 1)使用该命令前,必须使用一次LOCATE命令,即所谓的LOCATE和CONTINUE匹配使用问题 2)CONTINUE命令可多次使用,直到超出查找范围或遇到文件尾为止 3)本命令查找是否成功,可用FOUND()函数检测,.T.——成功;.F.——失败 本命令查找是否成功,可用eof()函数检测,.F.——成功;.T.——失败 【例】在student.dbf表中查找年龄大于18的所有记录 USE STUDENT LOCATE FOR 年龄>18 DISP 姓名, 年龄 CONTINUE DISP 姓名, 年龄 CONTINUE ?EOF() ?FOUND()
三、索引查询 索引查询是在索引文件中进行查询的一种方法。VFP提供了两条查询命令:FIND和SEEK命令。 1. FIND查找命令 【格式】FIND〈常量〉 功能:查找打开索引文件的数据表中,是否有与命令中的〈常量〉相一致的关键字值的第一个记录,找到后,把记录指针指向该记录号,便停止查找,如果没找到“则给出有关没有找到”的信息,此时,记录指针指向尾记录的下面(即记录总和值+1),函数EOF()=.T.,FOUND()=.F. 【说明】 1) 当库中有多个索引关键字的值与命令中字符串相一致的记录时,FIND只找相一致的第一个,可使用DISPLAY命令将该记录显示出来 2) FIND命令只能查找C型和N型索引关键字段的值,不能查找日期型、逻辑型和MEMO型关键字的值 3) FIND命令查找字符串(字符常量)时,如果无前导空格时,可以不用限界符(单引号、双引号或方括号)括起来,如果字符串有前导空格时,应使用限界符(单引号、双引号或方括号)括起来 如:查找姓名的值: 王海 用 FIND " 王海" 张洋 用 FIND 张洋 4) 查找的字符串可以是关键字的全部,也可以是最左边的一部分字符(称模糊查询) 例:FIND 李 5) 查找的常数为N型关键字的值时,命令中的数据一定按确切的值写。如:128.28不能写成:FIND 128.00 6) FIND可以查找复合索引关键字的值,可写成字符串或字符串表达式的形式,但给出的字符串的宽度一定要与库中的宽度相一致,否则找不到 【例】打开student1.dbf表文件,按姓名和高考成绩建立索引(.idx)其中:姓名字段宽度=8,高考成绩宽度=6, 1位小数。 查找姓名为"王琪",高考成绩为610分的记录. use student1 INDEX ON 姓名+STR(高考成绩,6,1) TO xmcj FIND "王琪 610" 或FIND "王琪 "+" 610" 5) FIND 不能直接查找内存变量的值,对于C型内存变量,要用宏代换函数代换出其值,对N型变量,应将其转换成C型后,再用宏代换函数代换出其值后查找 【例】FIND 查找示例 USE D:\MYVFP\STUDENT INDEX ON 姓名 TO D:\MYVFP\xm FIND 周庆国 ? found() &&函数返回值为.T.时,表示查找成功. DISP
2.SEEK查找命令 格式: SEEK <表达式> SEEK命令的作用和使用方法与FIND基本一致,但SEEK功能更强,它们的区别: 1)FIND只能查找C型和N型的索引关键字的值;SEEK表达式>可以查找:N、C、L、D型索引关键字的值。 2) FIND查找C型索引关键字的值时,可用或不用限界符('、"、[ ])括起来或不括起来;SEEK查找字符型索引关键字的值时,必须用单引号或双引号或方括号限界符括起来 3) FIND命令不能直接查找字符型内存变量的值,需使用宏代换函数,对数值型内存变量值需用转换成字符串后,再用宏代换代换后查找。如:高考成绩=570,应高考成绩=STR(高考成绩,6,1), FIND &高考成绩;SEEK可以直接查找内存变量的值,如:SEEK 高考成绩 说明: 1)不管是FIND还是SEEK查找,找到后,记录指针定位到该记录,可用DISPLAY或BROWSE命令显示出找到的记录内容,若数据库中还有符合条件的记录,可以用SKIP 命令继续定位到符合条件的记录,再用DISP或BROWSE显示其内容,若一个也没找到,记录指针定位到索引文件尾部 2)SEEK 和FIND查询后,可使用FOUND()函数检测查找是否成功 【例】 SEEK查找示例 SET DEFAULT TO D:\MYVFP USE STUDENT1 INDEX XM,GK,XMCJ,RQ SEEK " 秦飞" DISP SET ORDER TO 2 SEEK 610 DISP GK=586.6 SEEK GK &&直接查找数值型内存变量的值,不用&函数 DISP
-----------本节课结束-----------
5.4 计算与统计命令 计算和统计是数据库应用的重要内容,VFP具有多项计算统计功能,,如按指定条件统计数据表中记录的个数,对指定数值字段的全部或部分值求和或求平均计算,以及按要求对其中的某些数据做综合汇总等。本节主要介绍VFP提供的“记录个数的统计、求和求平均值、汇总求和及综合统计命令的使用。 1. 统计命令 【格式】COUNT [<范围>] [FOR <条件表达式1>] [WHILE <条件表达式2>][TO <内存变量名表>] 【功能】计算当前表中指定范围内符合条件的记录数。 【说明】 FOR <条件表达式1>或WHILE <条件表达式2>项:表示对符合条件的记录进行统计个数,省略,统计整个表中记录的个数。 省略范围和条件短语时,则对表中所有记录进行统计。 TO <内存变量名表>项:选,表示将统计的结果依次存入变量中。 省略TO <内存变量名表>项,只将统计的结果显示在屏幕上。 【例】统计STUDENT.DBF表中年龄大于18岁的记录。 SET DEFAULT TO D:\myvfp USE STUDENT COUNT ALL FOR 年龄>18 &&统计结果显示在状态栏上。 2. 求和及求平均值 【格式】SUM|AVERAGE [<数值表达式表>] [<范围>][FOR <条件表达式1>] [WHILE <条件表达式2>] [TO <内存变量名表>|ARRAY <数组名>] 【功能】对<数值表达式表>的各个表达式求和(SUM)或者求平均值(AVERAGE)。 【说明】 <范围>:有四种情况:RECORD <数值表达式表>中各表达式的和或均值可依次存入<内存变量表>或数组中,内存变量的数目要与表达式表的数量相同,其间用逗号分隔。如果省略表达式表,则对当前表的所有数值型字段求和(或求平均值)。 缺省范围和条件短语,则对所有数值字段进行列向求和或求平均值。 3. 综合计算 综合计算,指通过调用函数计算某个字段或某些字段的计数值、累加值、平均值、最大值和最小值等。 【格式】calculate [<表达式表>][<范围>][FOR <条件表达式1>][WHILE <条件表达式2>][TO <内存变量名表>|ARRAY <数组名>] 【功能】分别计算<表达式表>中各个表达式的值。 【说明】表达式常用的函数分别为别有:计数值函数cnt()、累加值函数sum()、平均值函数avg()、最大值函数max()和最小值函数min()。除cnt()函数外,其余四个函数的括号内都需指定字段名或表达式。 1)〈范围〉有四种情况:同SUM命令 2)〈条件〉:选对符合条件的记录的字段组成的表达式作统计计算 3) 范围和条件都省略时对所有记录 4)〈表达式〉必选项,由下列函数组成: CNT():无参数,用于计算数据库中记录的个数; MAX(〈表达式〉):返回〈表达式〉中的最大值,〈表达式〉的内容可以是数值型、字符型、日期型、逻辑型字段; MIN(〈表达式〉):返回〈表达式〉中的最小值,〈表达式〉可以是数值型、字符型、日期型、逻辑型字段; AVG(〈数值表达式〉):计算数值表达式的平均值 SUM(〈数值表达式〉):计算数值表达式的和值 5) 命令中使用上述函数时,若不选〈条件〉和〈范围〉项时,则对数据库中的全部记录进行操作,否则,对范围内符合条件的记录进行操作 6) TO〈内存变量表〉子句:选将各函数求出的表达式的值依次赋值给各个内存变量,省略TO〈内存变量〉统计计算的结果不保存。 【例】要计算表student.dbf的记录数,统计所有学生的最小年龄和平均年龄。 use student calculate cnt(),min(年龄),avg(年龄) TO JS,ZXNL,PJNL 4. 分类汇总 【格式】TOTAL TO 〈汇总表文件名〉 [范围] ON〈关键字〉[FIELDS〈数值表达式〉] [FOR〈条件〉] [WHILE 〈条件〉] 【功能】对当前表文件中的数值字段进行分类汇总,并产生一个新的汇总表文件(.dbf) 【说明】 1) TO 〈汇总表文件名〉:表示汇总结果的新表文件名 2) ON〈关键字〉:表示分类汇总的表文件必须按〈关键字〉字段排序或索引(按哪个字段分类,就需按哪个字段排序或索引) 3) 范围:选表示分类汇总表记录的范围 4) FOR〈条件〉:用来指定一个条件,表示只有对符合条件的记录进行分类汇总 5) WHILE〈条件〉:表示表中的记录一直被分类汇总,直到WHILE中规定的条件为假,即执行到第一个条件为假的记录,便停止操作 6) 若条件、范围子句都不选,则对全部记录 7) TOTAL汇总时,每遇到一个新〈关键字〉的值(即分类的类别)改变,就将具有该值的第一条记录存入汇总表文件,然后对该值的记录指定的N型字段汇总,汇总结果填入汇总表中相应字段内,即把具有该关键字值的第一个记录存入〈汇总表〉文件中。 【例】对STUDENT。DBF表按性别字段分类,对高考成绩汇总,产生新的汇总表文件为XBGKHZ.DBF, 要求把汇总表保存到D:\MYVFP文件夹中. USE D:\MYVFP\STUDENT INDEX ON 性别 TO D:\MYVFP\XBSY LIST TOTAL ON 性别 TO D:\MYVFP\XBGKHZ FIELDS 高考成绩 USE D:\MYVFP\XBGKHZ LIST
-----------本节课结束-----------
|
讲述
|
顺序查询
继续查找命令5分钟
Find查找命令10分钟
Seek查找命令15分钟
统计命令
求和及平均值8分钟
综合计算
分类汇总
|