“计算机操作技术”讲座(13) 数据库(三)

🏠 首页 《无线电》杂志 1995年 🔗 第8期 🔗 第40页 分类:答读者问 🔗 杨锡平 🔗

一、数据库的统计

统计是数据库中最为有用和最为常用的操作之一,几乎所有的数据库系统都离不开它。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():生成重复字符

例如:

图1
图1 🔍原图 (720×350)

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的全部内容。(讲座内容全部刊完)(杨锡平)