一、数据库的统计
统计是数据库中最为有用和最为常用的操作之一,几乎所有的数据库系统都离不开它。Foxbase的统计操作命令有:COUNT,AVERAGE,SUM,TOTAL。
(1)COUNT命令
COUNT命令用于统计数据库中在一定范围内满足某种条件的记录数。其使用格式一般为:
COUNT[<范围>][FOR<条件>][TO内存变量>]其中:
[<范围>]表示该命令对哪些记录进行操作,它可以是:
①ALL:对所有记录进行操作,而不管当前记录是哪一条记录。
②NEXT<n>:从当前记录开始的n个记录进行操作。
③RECORD<n>:仅对第n号记录进行操作。
④REST:对当前记录至其后的所有记录进行操作。
若指定[TO<内存变量>],则统计结果保存在数字型的内存变量中;若未指定,统计结果仅显示在屏幕上。
如有以下数据库GZ:
.USE GZ
.LIST
Record# 姓名 性别 年龄 职称 月收入
1 李建军 男 30.00 助教 286.50
2 张文华 男 55.00 副教授 438.70
3 王小红 女 32.00 讲师 382.30
4 苏 伟 男 52.00 工程师 420.60
5 赵纪元 男 57.00 教授 512.40
6 刘丽娟 女 45.00 讲师 410.00
.COUNT ALL FOR 性男=‘男’TO MEN
4 records
.COUNT ALL FOR性别=‘女’TO WOMEN
2 records
.?MEN,WOMEN,MEN+WOMEN
4 2 6
其中第一个COUNT命令用于统计所有男职工的人数,第二个COUNT命令用于统计所有女职工的人数,最后一个?命令用于显示统计结果,即男职工人数、女职工人数和全体职工人数。
(2)AVERAGE命令
AVERAGE命令用于计算某个数值型字段的平均值,其一般使用格式为:
AVERAGE<数值型字段>[FOR<条件>][TO<内存变量>]
其中:
<数值型字段>是指当前打开的数据库中的数值型字段。要注意不能对非数值型的字段求平均值,例如求姓名的平均值是没有意义的。
例:求男女职工的平均年龄和平均月收入
.USE GZ
.AVERAGE 年龄 FOR 性别=‘男’TO AGEMEN
4 records averaged
年龄
48.50
.AVERAGE 年龄 FOR 性别=‘女’TO AGEWOMEN
2 records averaged
年龄
38.50
.AVERAGE 月收入 FOR性别=‘男’TO SALMEN
4 records averaged
月收入
414.55
.AVERAGE 月收入 FOR性别=‘女’TO SALWOMEN
2 records averaged
月收入
396.15
.? AGEMEN,AGEWOMEN,SALMEN,SALWOMEN
48.50 38.50 414.55 396.15
其中每次AVERAGE操作均显示对几条记录求了平均值,以及平均值是多少。
(3)SUM命令
SUM命令用于求数值型字段的和,其一般使用格式为:
SUM[<范围>][<数值型字段>][FOR<条件>]
[TO<内存变量>]若来指定[<数值型字段>],则对数据库中所有数值型字段求和;否则只对指定的数值型字段求和。
例:求男职工的工资总和
.USE GZ
.SUM 月收入 FOR性别=‘男’
4 records s
月收入
1658.20
例:求所有职工的平均月收入
方法1
.USE GZ
.AVERAGE 月收入 TO AVERSAL
6 records averaged
月收入
408.42
.?AVERSAL
408.42
方法2
.USE GZ
.COUNT TO NO ㄍ臣浦肮と耸
6 records
.SUM 月收入 TO TOTSAL统计月收入总额)
6 records summed
月收入
2450.50
.?TOTSAL/NO求平均月收入)
408.42
(4)TOTAL命令
TOTAL命令用于将数据库中某些数值型字段按照关键字段进行分组求和,结果存放在新生成的数据库中,它的一般使用格式为:
TOTAL ON <关键字段>TO<文件名>[FOR<条件>]
TOTAL命令相对于上面的几条命令较难使用和掌握,在使用TOTAL命令前,数据库必须用IN-DEX或SORT命令进行过索引或分类,否则会造成操作失败。
TOTAL命令操作结束后,数据库中具有相同关键字段值的所有记录合并成一条记录,并将所有数值型字段求和,其它字段值取自每组中的第一条记录。
例:按职称分组求和
. USE GZ
.INDEX ON职称 TO IGZ
6 records indexed
.TOTAL ON 职称 TO ZC
6 records totalled
5 records generated
.USE ZC
. LIST
Record# 姓名 性别 年龄 职称 月收入
1 李文华 男 55.00 付教授 438.70
2 苏 伟 男 52.00 工程师 420.60
3 王小红 女 77.00 讲师 792.30
4 赵纪元 男 57.00 教授 512.40
5 李建军 男 30.00 助教 286.50
在分类求和生成的新数据库ZC中,由于“讲师”类中有二人即“王小红”和“刘丽娟”,所以只产生一条记录,但其数值型字段“年龄”和“月收入”已是她们两人相应值的和,即分别为77和792.30,而其它字段的值均来自“王小红”记录的值。
二、 Foxbase函数
Foxbase提供了丰富的系统函数供用户调用,所谓系统函数是指在Foxbase内部已经定义好了,一旦启动了Foxbase便可直接调用。这些函数大致可以分为以下七大类:
(1)数学函数(2)字符函数(3)日期函数(4)转换函数(5)测试函数(6)标识函数(7)输入函数
下面我们将介绍其中较为常用的一些函数,至于其它函数读者可以参阅有关专业书籍,或者在圆点状态下输入help进行自学。
(1)数学函数
顾名思义,数学函数是进行数字计算时使用的,这类函数有:
ABS():取绝对值
EXP():取以e为底的指数值
INT():取整
LOG():取以 e为底的对数值
SQRT():求平方根
MAX():求最大值
MIN():求最小值
ROUND():四舍五入
MOD():求余数
例如:
.?ABS(-4)
4
. ? EXP(1)
2.72
.?INT(-10.5)
10
.? LOG(10)
2.3O
.? SQRT(4)
2.00
. ? MAX(3,4)
4
. ? MIN(3,4)
3
.? ROUND(12.346,2)
12.350(其中2表示精确到的位数)
.? MOD(15,4)
3 (15除以4的余数为3)
(2)字符函数
字符函数主要用于处理字符或字符串,这类函数常用的有:
SPACE():生成空格
REPLICATE():生成重复字符
例如:

OKOKOK
(3)日期函数
常用的日期函数有:
TIME():返回系统时间
DATE():返回系统日期
例如:
.?TIME()
21∶17∶18 (格式为小时分钟:秒钟)
.?DATE()
06/10/95 (格式为月/日/年)
(4)转换函数
转换函数用于进行数据转换,这类常用的函数有:
UPPER():将小写字母转换成大写字母
LOWER():将大写字母转换成小写字母
ASC():求字符的ASCⅡ码值
CHR():将数字按ASCⅡ码转换成字符
例如:
.?UPPER(‘a’)
A
.?UPPER(‘Foxbase’)
. FOXBASE
.?LOWER(‘GOOD’)
. good
.?ASC(‘A’)
65
.?CHR(65)
A
(5)测试函数
测试函数是Foxbase中使用较多而且非常有效的函数之一,这类函数中常用的有:
TYPE():测试表达式的数据类型
FILE():测试文件是否存在
LEN():求字符串的长度
EOF():测试是否至文件结束位置
BOF():测试是否在文件开始位置
ISCOLOR():测试所用显示器是否为彩色
FOUND():测试是否找到记录
DELETED():测试当前记录是否被删除
RECNO():返回当前记录号
DISKSPACE():返回当前磁盘可用空间大小
例如:
.?TYPE(‘12*3+4’)
N(表达式12*3+4为数值类型)
. ?FILE(‘TXL.DBF’)
.T. (如果文件TXL.DBF存在的话)
. ?LEN((‘HELLO’)
5
.USE TXL
,? EOF()
.F. (表示未至文件结束位置)
. ?BOF()
.F. (表示未至文件开始位置)
.SKIP-1
Record No.1
. ?BOF()
.T. (这时已至文件开始位置)
. LIST
.? EOF()
.T. (这时已至文件结束位置)
. ? ISCOLOR()
.T. (表示显示器为彩色)
.USE TXL
.LOCATE FOR 姓名=‘刘英’
End of Locate scope.
. ?FOUND()
.F. (表示未找到该记录)
.USE TXL
.DELETE
1 records deleted(第一条记录被删除)
.?DELETED()
.T.
.USE TXL
. ?RECNO()
1 (打开时位于第一条记录)
.?DISKSPACE()
987136 (当前磁盘所剩空间大小)
(6)标识函数
这类函数常用的有:
DBF():返回当前打开的数据库文件名
VERSION():返回Foxbase版本号
OS():返回DOS版本号
例如:
.USE TXL
.? DBF()
C:\FOX\TXL.DBF
.? VERSION()
.FOXBASE+2.10
. ?OS()
DOS 05.00
(7)输入函数
常用的输入函数有:
INKEY():等待输入键
这个函数一般用于命令文件.prg中,如:
INKEY(10)
它等待10秒钟,如果在10秒内击了键,则返回该键的ASCⅡ代码值,否则返回0。
由于命令文件.prg的程序设计涉及到许多计算机程序设计的专门知识,在此限于篇幅我们不能作进一步深入介绍。
这里所讲的仅是Foxbase的基本操作知识,但有了这些基本知识后,读者可以继续学习,直至完全掌握Foxbase的全部内容。(讲座内容全部刊完)(杨锡平)