教学设计
您当前的位置: 澳门新葡京app>教学设计

8.1 查询和统计

发布时间: 2019-01-27      信息来源:       阅读次数:

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,NEXT ,REST,ALL

<数值表达式表>中各表达式的和或均值可依次存入<内存变量表>或数组中,内存变量的数目要与表达式表的数量相同,其间用逗号分隔。如果省略表达式表,则对当前表的所有数值型字段求和(或求平均值)。

缺省范围和条件短语,则对所有数值字段进行列向求和或求平均值。

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

-----------本节课结束-----------

讲述

顺序查询
10分钟

继续查找命令5分钟

 

Find查找命令10分钟

 

Seek查找命令15分钟

统计命令
5分钟

求和及平均值8分钟

 

综合计算
5分钟

分类汇总
15分钟