版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
查询、统计和多表操作
表文件中记录的顺序通常是人们在输入数据时按输入的先后次序存储的,并以记录号表
示,这个顺序只反映了存放数据的先后顺序。但在数据处理实际应用中,由于数据库十分庞
大,为了高效方便地处理数据,常常需要对记录位置进行重新整理,并按某种指定的顺序对表
记录进行处理。例如,对学生成绩表按学号为序显示输出记录,以便查找:或按总分高低为序
输出记录,以便进行比较等等。
对记录位置进行重新整理通常有排序和索引两种方法。排序是对表文件进行物理位置的
整理;索引是对表文件进行逻辑位置的整理。
一、排序
表文件的排序操作就是根据表的某个关键字或关键字表达式重新排列表记录的
位置。执行排序操作后将生成一个新的表文件(称为:排序文件)。新文件的结构
和数据可以与源文件完全相同,也可以只取源文件的部分字段。新文件不改变源文
件内容和记录顺序。
【命令】SORTTO〈新文件名>ONv字段名1>[/A][/D][/C][,一字段名2>[/A][/D]
[/C]...][ASCENDING|DESCENDING][v范围习[FOR<条件>|WHILE〈条件
>][FIELDS<字段名表>|FIELDSLIKE<通配符>|FIELDSEXCEPTv通配符>]
【功能】对当前表中指定范围内、满足条件的记录按指定字段升序或降序重新排
序,并将排序结果存入新文件名中。
【说明】
①排序结果存入由TO〈新文件名》指定的表文件中,系统默认文件扩展名为.DBF。
②在ON子句中的字段名表示排序的关键字段,当使用一个关键字时,叫“单重排序”:使用多个关
键字时,叫“多重排序”。在多重排序中,关键字有主次之分。主关键字是指能够唯一标识
某个记录的关键字;次关键字是指标识具有某种相同属性的某些记录的关键字。在关键字表达
式中,主关键字排在前面,次关键字排在后面。执行排序操作时.,先按主关键字排列,当在主
关键字出现相同字段值时,再按次关键字排序。
③关键字段可以是N型、C型或。型,但不能是L型、M
型和G型数据。即不可选用备注型或通用型字段来排序。其中:N型以
数值大者为大;C型以拼音顺序A〜Z;D型以后面的日期
为大。
④参数/A或ASCENDING表示升序排序:/D或DESCENDING表示降序排序。省略时,表示
升序:/C只适用于C型数据,选择/C时,不区分大小写字母,省略/C时,小写字母大于大写字
母。
⑤省暗〈范围〉、FOR〈条件>/WHILE〈条件>等子句,则对所有记录排序。
⑥FIELDS子句指新表中包含的字段,省略时,默认新表包含源表中所有字段。<字段名表
》可以包含其他工作区中的表文件字段,但必须使用别名调用格式:
工作区号一〉字段名;或:别名一>字段名;或:别名.字段名。
【例5-1]对表文件“学生.DBF”中的男生按入校总分降序排序,生成新文件
“入校总分.DBF”,且新表中只包含学号、姓名、入校总分3个字段。
USE学生
BROWSE&&显示结吴如图5-1所示。
IK33BKaicnEHZ1
I*0201(01|王小平wto/n^
vOCQHOS*9Ot/I2/M
旬H!£oi/az/w
a而
•ocoitosauw★O5/12/e<
<601106it«I2/S2/S3
fCQOHOTZK支IIAH/W
vocoiioe分♦
血”09的F.as/is/as
40201110HP*
图5-1学生.DBF显示结果
SORTTO入校总分ON入校总分/DFIELDS学号,姓名,入校总分
USE入校总分
BROWSE&&显示结昊如图5-2所示。
图5-2入校总分.DBF显示结果
【例5-2]对“教师.DBF”记录中享受政府津贴的教师按姓名升序排序,生成新
文件文府津贴.DBF”。
USE教师
BROWSE&&显示结只如图5-3所示。
图5-3教师.DBF显示结果
SORTTO政府津贴ON姓名FOR政府津贴
USE政府津贴
BROWSE&&显示结吴如图5-4所示。
图5-4政府津贴.DBF显示结果
二、索引
5.2.1索引的概念
VisualFoxPro的索引文件由指向.DBF文件记录的指针构成,这些指针指向表文件中的记
录,在逻辑上按照指定索引关键字排序,索引并不改变表记录的物理顺序,只是与表记录建立
一种逻辑关系。
索引和表(.DBF)分别存储在两个文件中。在索引文件中,只包含索引关键字和记录号
两个字段,每个关键字值对应表文件中的一个记录号,利用记录指针的移动确定记录的逻辑顺
序。索引是一种不可显示文件,
如果用户希望按照某种特定顺序查看和访问表记
录,例如按总分从高到低的顺序查看学生表中的记录,
可以按总分索引,然后根据这个索引关键字设置表中记
录的顺序,并且按新的顺序访问表记录。使用索引可以
加速对表的查看和访问操作,这类似于一本书按目录快
速查找内容。
1.物理顺序、逻辑顺序与使用顺序
记录储存在表文件中的实际排列顺序,称为物理顺序。执行排序操作后,记录在排序文
件中形成的顺序就是一种物理顺序。
按照某个关键字或关理字表达式在关键字与记录号之间建立的一种逻辑上的顺序,称为
逻辑顺序。执行索引操作后,索引关键字与记录号建立的顺序就是一种逻辑顺序。
实际操作的记录顺序,称为使用顺序。使用顺序可以是物理顺序,也可以是逻辑顺序。
记录指针在表记录中的移动是按使用顺序进行的。
2.索引的分类
VisualFoxPro的索引分为单索引和复合索引。
只包含一个索引项的索引文件,称为单索引文件
(又叫独立索引文件)。单索引文件扩展名为.IDX。
包含有多个索引项的索引文件,称为复合索引文
件。在复合索引文件中每个索引项都有一个索引标识
(IndexTag),代表索引的名称。复合索引文件自动
被压缩,以压缩方式储存,占有较小空间。复合索引文
件在使用时必须打开,而且在更新表文件数据时,必须
使其处于活动状态。复合索引文件扩展名为.CDX。
根据功能不同,复合索引可以分为主索引、候选索
引、普通索引和唯一索引4种类型。
(1)主索引
主索引是设定有主关键字的索弓I,主关键字能唯一确定记录的顺序,它不允许在指
定字段中出现重复值。如果在任何已经包含了重复数据的字段中指定主索引,
VisualFoxPro将返回一个错误信息。例如,将姓名字段作为主索引关键字,若出
现同名同姓人员,也即出现了关键字重复值,这样的关键字就不是主关键字。主索
弓I仅适用于表表,一个数据表只能创建一个主索引,自由表不能创建主索引。
(2)候选索引
像主索引一样候选索引要求字段值的唯一性,它不
包含NULL值或重复值。如果在任何包括重复数据的字段中指定候选索引,
VisualFoxPro将返回一个错误信息。一个数据表或自由表中都可以建
立多个候选索引。
(3)普通索引
普通索引不要求字段值具有唯一性,可以决定记录
的处理顺序,且允许字段中出现重复值。一个数据表或
自由表中可以有多个普通索引。
(4)唯一索引
不允许两个记录具有相同的字段值,对于关键字值相同的记录,
索引中只列入其中的第一个记录。-个数据表或自由表中可以有多个普通
索引。
复合索引文件分为有结构的结构复合索引文件和无非结构的
独立复合索引文件。结沟复合索引文件的由VisualFoxPro自动命名,与表文件同名,它
随表文件的打开而打开,在对表增加或删除记录时系统会自动维护。独立复合索引文件与表文
件不同名,且不随表文件的打开而打开。打开独立复合索引文件要使用SETINDEX命令。
3.永久关系与参照完整性
主索引用于表表中主表或“被引用”表,在一个永久
关系中建立参照完整性。
(1)永久关系
指表中表之间的一种保存在数据表文件中的关系。
在表设计器中可以看到连接两个表索引之间的关系线。
(2)参照完整性
在永久关系的相关表中,如果只对其中的一个表进
行插入、更新或删除操作,就会影响到数据的完整性。
因此,参照完整性属于表表间规则,用于控制数据的一
致性。为了保持参照完整性,可以利用“参照完整性生
成器”建立规则,控制记录在相关表中的插入、更新或
删除。
5.2.2索引的建立
1.命令方式
【命令】INDEX0N<索引关键字|索引关键字表达式>T0<单索引文件名>|TAG<
索引标识名〉[OF<复合索引文件名>][FOR<条件>][COMPACT][ASCENDING
IDESCENDING][UNIQUE|CANDIDATE][ADDITIVE]
【功能】对当前表文件按指定关键字建立索弓I或二曾力口索引标识。
【说明】
①〈索引关键字I索引关键字表达式〉:指定建立索引文件的关键字。可以是一个字
段,也可以是多个字段组成的关键字表达式,多个字段之间用“十”或“一”连接,主
关键字在最前面,且数据类型要相同。<索弓I关键字〉可以是N型、C型、D型。
子句建立单索引子句建立复合索引及索引标识。
②TO(.IDX)oTAG(.CDX)
选项COMPACT指定单索引为压缩文件。
③OF子句指定独立复合索引文件名。缺省该子句表示建立结构复合索引文
件。
④FOR〈条件>对符合条件的记录建立索引,缺省该条件则对所有记录建立索引。
⑤ASCENDING表示升序索弓|;DESCENDING表示降序索引;UNIQUE表示建立
唯一索引;TAGCANDIDATE表示候选索引。
⑥ADDITIVE表示建立索引文件时,并不关闭先前的
索引c
⑦索引文件不能单独使用,必须同表文件一起使用。
⑧该命令默认建立普通索引型索引文件。
【例5-3】对学生.DBF按入校总分建立单索弓|文件。
USE学生
INDEXON入校总分TOZF
S
a吃2
划
务SF
三
♦T三
aSF
f
n三
«orztvwF
SF
wnwf••
三
f1Sf三
(Q/ia/wf
9”如9
【例5-4】学生.DBF建立复合索弓I,其中包含3个索弓|:
(1)以姓名降序排列,索引标识为普通索引。
USE学生
INDEXON姓名TAGxmDESCENDING
**建立复合索引文件学生.CDX,xm为普通索引标设
LIST
Wy
=文,月
2Fj
■-9tz
t■«9
9amtn/it/et二z
1王29io<nnM
3U«otAoe/eB三
T■Ntm
.aM■二
i
10
■w
(2)以性别升序排列,性别相同时以入校总分升序排列,索弓I标识为普通索弓I。
INDEXON性别+STR(入校总分,3TAGxbzfa
**关键字为性别+STR(入校总分,3,普通索引标识xbzfa加入学生.CDX中
LIST
於
业办S管
』:
oe/iwasS
三
u/u/mS三
I…:M二
S』
ll/OT/W
』
OLH.US三
oemrti二
08/U/W
(3)以性别升序排列,性别相同时以出生年月降序排列,索引标识为候选索弓I。
INDEXON性别-DTOQ出生年月TAGxbcsdCANDIDATE
**xbcsd为候选索引型索引标识,索引标识Xbcsd加入学生.CDX
LIST
S流
(tt/lSM
!?三
io由nim8”•刖S三
4GX皿0T/2VM
1««oiia?0B”g
S三
ienii。)io/n/ei三
•由1108iVlMQS
3W118oi«cm
三E
■9由“8c;二,,S
T«XD110Yiim/tD
2.菜单方式他立索引
【菜单】单击,,文件,,菜单一单击,,打开,,命令一选中“表,,选项一,,显示,,菜单一表设计
器一“索引”选项卡T嗦引名”一“排序”一“类型”一“表达式”一单
击“确定”按钮。如图5-5所示。
图5-5表设计器中“索引”选项卡
【例55】利用表设计器建立或修改索引。
(1)选择“文件”菜单中的“打开”命令,选择表文件“学生.DBF”。
(2)选择“显示”菜单中的表设计器,单击“索引”选项卡,将“索引名”设为
XBXHAD,单击该表达式右侧的按钮,弹出“表达式生成器”对话框,如图5-6所示。在“字
段”列表框中双击“性别”,在“数学”组合框中选定“+”号,在“字段”列表框中双击
“学号”,这时,“表达式”列表框中显示“性别+学号”。也可以在“表达式”列表框中直
接输入表达式“性别+学号”。
图5-6表达式生成器
(3)单击“确定”按钮,便完成建立工作。
(4)利用“表设计器”对话框中的“插入”按钮在当前行前插入一个空行,可以建立新索
引。利用“删除”按钮可以删除选定的索引。
5.2.3索引的使用和删除
使用索引查询必须满足以下条件:
(1)打开表。
(2)打开索引文件。
(3)确定主控索引文件。
(4)对于复合索引文件还需确定主控索弓I。
1.打开索引文件
使用索弓I,必须同时打开表文件和索引文件。打开索弓I文件就是把索
引文件调入内存,并对当前相关表进行排序。打开一个表文
件时,结构化复合索弓I文件将随着表文件的打开而打开,如果要使用其他索弓I文
件,则要使用命令来打开索引文件。
一个表文件可以打开多个索引文件,但任何时刻只有一个索引文件起作用,当前起
作用的索引文件称为主控索引文件。只有主索引文件对表文件才有
控制作用,记录指针总是指向主索引文件关键字值的第
一个记录上。同一个复合索引文件可能包含多个索引标识,但任何时刻只有
一个索引标识起作用,当前起作用的索引标识称为主控索引。
打开索引文件有3种方法:
(1)在建立索引文件的同时,就打开了索引文件。
(2)打开表文件的同时打开索引文件
【命令】USE〈表文件名>|?[INDEXv索引文件名表>|?][ORDER[〈数值表达式
>上单索引文件名>|[TAG|v标识名>[OFv复合索引文件名>|[ASCENDING
IDESCENDING]]]
【功能】打开表文件的同时打开一个或多个索引文件。
【说明】
①INDEX<索引文件表》包括单索引或复合索引文件,其中第一个索引文件是主索
引。
②选择,,?,,将弹出多个表文件或索引文件,供选择,
③ORDER[〈数值表达式习是将〈索引文件名表》中的第几个设置为主控索弓I。
④ORDER|〈单索引文件名>]指定〈单索引文件名》为主控索引文件。
©ORDER"AG]<标识名>[OF<复合索引文件名〉]指定复合索引的〈标识名〉为主
控索引;不选择[(^<复合索引文件名>],则打开结构复合索弓I文件。
【例5-6】应用举例。
USE学牛INDEX学牛ORDERTAGxbxha
n氏
3
810/Z3/Mn
,(■/U/M
6ytt/U/W
oc/ivm
|(>(n/it/n
301/asm
8三
5O»VR/M
ii/trr/t)
8・
(W/30/M
USE学生INDEX学生ORDERTAGxm
兰
二.•
oe.12/-W
01/■ZA.
ae/n/M士U
OS/lf/64m
BAKEw
5CQ®;一.
u/u/m
(3)打开表文件后再打开索引文件
【命令】SETINDEXTO<索引文件名表>〔ADDITIVE]
例如:
USE学生
SETINDEXTOzf
£
-s一T
*“RTE
刘*01W,flf
Ig”的sT三
ator/iVM;
m三
Hisnvo;三
*S/XVH
菱,
-ia/n/Mm二
ovia/t);£
m/n/w
2.设置主控索引
如果只打开一个索引文件,它自然就是主控索引文件;如果打开了多个索引文件,可以
利用设置主索引文件命令来改变主索引文件。
【命令】SETORDERTO[<数值表达式>|〈单索引文件名>|[TAG]<索引标识名>[OF〈复合
索引文件名〉j[ASCEND1NGIDESCENDINGJ]
【功能】对打开的索引文件中指定主控索引文件,或在打开的复合索引文件中设置主控
索引。
【说明】SETORDERTO0^4SETORDERTO都是取消主控索引文
件或主控索引。
【例5-7】为如图5-7所示的复合索引文件学生CDX设置主索引。
r表设讨■-学生db£
字段黛朝表।
抻序索引名类型表达式
tif告通索引入校总分
,!■苫通索引控名
tXBZFA普通索引性别*STK(A校.
-
fXBCSD皎选素引性别-DTOC叱M
tXBXHA告通至引性别♦字号
11
图5-7复合索引文件学生CDX
USE学生
SETORDERTO2M指定学生.CDX中的索引序号2(即xm)为
主控索引。
E
r加工重♦,A
«丽2&Si
Jr(W/JDZWIj
fla/is/«H
拿OS/ltZMl
・I
次MAK/WIm
*limeS
fl(H/2gM一
•O3fie/S3E二
SETORDERTOxbxha&&指定学生.CDX中的索引标识xbxha//三£才仝
索引。
at-J!吐
•KOI16■wm
■一?
•ocoimr三
51IC4Bar/H/M
三
■aeons9u/u/ss三
Hoe/iv«
•k;l;0■8/ie/ts1
<060113>oi/aem:1
■acoim,dVU/M=
3113/ll/OTQ二.
tXOlMtS/»/M
SETORDERTOzf&&指定单索引文件zf.ND为主控索引文件。
£号
«S
R“EE:
01W
;S三
a一
or/ivwS
H二
«I2/1ZJW3三
S二
01/XVH
I-
X二
0"⑶2=
S/1M
3.更新索引
当对表文件进行追加、修改等操作后,对于打开的
索引文件或随着表文件打开而打开的复合索引文件,系
统自动将其更新,而对于那些没有打开的索引文件则变
得无意义了。为了使这些索引文件仍然有效,可以利用
重新索引命令,使其与修改后表文件保持一致。
【命令】REINDEX[COMPACT]
【功能】重新建立打开的索引文件。
【说明】
⑴在更新索引之前,应打开表文件和相应的索引文
件。
(2)选择COMPACT,将非压缩单索引文件转换为压缩单索引文件。
【例5-8】更新索引举例。
USE学生
LIST&&显示有10条记录
APPEND&&追加一条记录
USE
USE学生INDEX学生ORDERTAGxm&&打开主关键字为姓名的复合索弟文件
LIST&&显示有II条记录被索引
USE学生
SETINDEXTOZF&&打开主关键字为入学总分的单索引文件
LIST&&显示只有10条记录被索引
REINDEX
LIST&&显示有II条记录被索引
4.关闭索引文件
关闭索引文件,就是取消索引文件对表文件的控制
作用。
关闭索引文件有三种方法:
(1)关闭当前索引文件:SETINDEXTO
(2)关闭所有索引文件:CLOSEINDEX
(3)关闭表文件的同时,关闭索引文件:USE
5.删除索引
可以通过删除复合索引文件中的索引标识来删除不
再使用的索引,或者通过删除单索引文件本身来删除
独立索引。删除无用的索引标识可以提高数据处理性
能,因为VisualFoxPro不必再去更新无用标识来反映表中数
据的变化。
由于复合索引中包含由多个索引标识,所以应采用
删除索引标识的方法。
【命令】DELETETAGALLI〈索引标识1>[,〈索引标
识2>]……
【菜单】“文件”菜单一“打开”命令一“表”选项一“显示”菜单一表设计器一“索
引”选项卡一“索引名"一“删除"。
【功能】从指定复合索引文件中删除指定索弓I标识,或册IJ除所有索弓I
标识。
【说明】当删除指定复合索引文件中的全部标识后,该复合索引文件将自动被删除。
三、查询
查询就是按指定的查询条件查找符合条件的记录。
排序和索引的主要目的也是为了对表文件快速查询。
VisualFoxPro提供了几个与索引相关的函数FOUND
()、RECNO()和三个检索命令LOCATE与
CONTINUE、SEEKIFIND、SQL语言的查询命令:
SELECT-SQL。
5.3.1函数FOUND()和RECNO()的使用
L记录找到否测试函数
【命令】FOUND([<工作区号>]
【功能】判断记录是否找到。
【说明】如果记录找到,则函数返回值为.T.;否则函
数返回值为E。如果指定工作区中的表文件没有打
开,则函数返叵值为假。
2.求得记录号函数
【命令】RECNO(0
【功能】给出当前正在使用的表文件的当前记录号。
【说明】若指定工作区中的表文件没有打开,则函数返
回值为0o
5.3.2顺序查询
顺序查询又叫直接查询,是按照表记录的物理位置
依次逐个查询。
L顺序查询命令
(1)LOCATE命令
【命令】LOCATE[范围][FOR<条件可[WHILE〈条件〉]
【功能】从指定范围内查找满足条件的第一个记录,并
将记录指针定位在此。
【说明】省略[范围]和[FORv条件〉]|[WHILEv条件习,
系统默认为ALLO该命令一旦找到符合条件的第一个
记录,记录指针立即指向该记录,并且停止继续查找,
显示其记录号,但不显示记录内容;如果没有找到,记
录指针则定位在范围末尾,屏幕显示“已到定位在范围
末尾
2.CONTINUE命令
【命令】CONTINUE
【功能】与LOCATE命令连用,继续查找LOCATE命
令指定条件的记录。
【说明】CONTINUE命令必须用在LOCATE命令之
后。每执行一次CONTINUE命令,将继续查找下一个
符合条件的记录。
【例5-9】在“学生.DBF”中查找姓名为王小平的记录。
USE学生
LOCATEALLFOR姓名。王小平
DISP
CONTINUE&&屏幕显示:已到定位在范围末尾。
zs&£±1♦文—分三思曳-2ia
itfffim王小季■KVIVM*rMW~
【例5-10]在“教师.DBF”中查找职称是教授的记录.
USE教师
LOCATEALLFOR职称="教授”
DISP
CONTINUE
DISP
CONTINUE&&屏幕显示:已到定位在范围末尾。
RJL9CBM整VUftXSCtfiJK
>।noiWeJF9i9noooT
<tn04A8tes300000T
5.3.3索引查询
索弓I查询又叫快速查询,是按照表记录的逻辑位置
查询。因此,索引查询要求被查询表文件建立并打开索
引。
1.FIND命令
【命令】FINDV字符型常量>|V数值型常量,
【功能】在打开的索引文件中查找索引关键字与〈字符
型常量>或<数值型常量,相匹配的第一个记录,并将记
录指针定位在此。
【说明】
①FIND命令只能对已建立并打开的索引文件进行查
询。如果查找成功,记录指针定位在符合条件的第一个
记录上,并停止继续查找,FOUND(函数值为.T.;否
则,屏幕显示:“没有找到。FOUND(函数值为F,
EOF(函数值为T。
②FIND命令可以使用内存变量,如果是C型内存变
量,必须宏代换:FIND&型内存变量,;如果是N型
内存变量,则先用STR(函数将其转换为C型内存变量
后,再用宏代换。
③FIND命令只查找符合条件的第一个记录,与
SKIP命令配套使用可以实现继续查找。
④利用SETEXACTON命令可以实现对C型数据
进行精确查找,即要求C型数据精确匹配;利用SET
EXACTOFF命令可以可以实现对C型数据进行模糊查找,即
不要求C型数据精确匹配。
【例5-11】在学生DBF中查找姓名为王小平的记录。
USE学生
INDEXON姓名TAGxm
FIND王小平
D1SP
【例5-12]在学生DBF中查找男同学的记录。
USE学生
INDEXON性别TAGxb
FIND男
LISTFOR性别="男”
巴
出至43■&
王H三
WI2/M士
a9m/svx
e•三1
•>«/wmZ
w\^i
【例5-13]使用内存变量示例。
tn=STR(595
INDEXON入校总分TAGrxzf
FIND&tn
DISPFIELDS姓名,入校总分
tm="张强”
INDEXON姓名TAGxm
FIND&tm
DISPFIELDS姓名
记录号姓名入校总分
5吴红梅595
记录号姓名
2张强
2.SEEK命令
SEEK命令比FIND命令的功能更强。它不仅能够查找C型和N型数据,还能够查找D型和L型
数据。
卜命令】式"ORDER〈索引号)|<单索引文件名>]1[TAGk索引标识》
【功能】在打开的索引文件中查找主索引关键字与〈表达式》相匹配的第一个记录,并将记录
指针定位在此。
【说明】
①SEEK命令只能对已建立并打开的索引文件的表文件进行检索。如果查找成功,记录指针定
位在符合条件的第一个记录上,并停止继续查找,FOUND(函数值为.「;否则,屏幕显示:“没有
找到。",FOUND(函数值为.F.,E0到函数值为.T..
②SEEK命令可以查找C型、N型、D型、L型数据。如果查找C型常量,必须用定界符将C型
常量引起来。
③SEEK命令只查找符合条件的第一个记录,与SKIP命令配套使用可实现维续查找。
④利用SETEXACTON命令可以实现对C型数据进行精确查找,即要求C型数据精确匹配:利
用SETEXACTOFF命令可以可以实现对C型数据进行模糊查找,即不要求C型数据精确匹配,
【例5-14]在“学生.DBF”中查找年龄为18岁的记录和出生年月为1984年7月24号的
记录。
USE学生
INDEXONYEAR(DATE(-YEAR(出生年月TAGnj
SEEK18
DTSPALLFORYEAR(DATE(-YEAR(出生年月二18
INDEXON出生年月TAGcs
SEEK「1984/7/24}
DISP
!?
t—118三
4ODUM
$a
!?
【例5/5】在教师.DBF中查找享受政府津贴的教师。
USE教师
INDEXON政府'津贴TAGzfjt
SEEK.T.
DISP
SKIP
DISP
SKIP&&屏幕显示:已到文件尾。
IBBXSLBfiitK
imoi丁E丁而mooT
KiSftlIBftXftMg
<t1l(MRt±fftt300000T
【例5」6】精确查找和模糊查找举例。
USE授课
INDEXON课程号TAGkch
SEEK“C16”
?FOUND(&&屏幕显示:.T.
SETEXACTON&&设置精确配置
SEEK“C16”
?FOUND(&&屏幕显示:.F.
四、统计
对表文件进行统计计算,包括计数、求和、求平均值、计算和汇总。
5.4.1计数命令COUNT
【命令】COUNT[范围][FOR<条件>|WHIIE<条件
>][TO<内存变量>]
【功能】统计当前表文件中指定范围内满足条件的记录
个数。
【说明】省略全部选择项,则统计表文件中的所有记
录;选择[TO<内存变量习,将统计结果存入内存变量
中;否则,不保存统计结果,仅在屏幕上显示。
【例5一⑺统计“学生.DBF”中学生总人数和女生总人
数。
USE学生
COUNTTOxszrs
COUNTFORNOT性别TOnsrs
?xszrs,nsrs&&屏幕显示:104
5.4.2求和命令SUM
【命令】SUM[范围][型字段表达式表〉][FORv条件
>|WHILE<条件>][TO<内存变量表>|ARRAY<数组
名>]
【功能】在当前表文件中,对指定范围内满足条件的N型字段纵向求和。
【说明】
①选择[型字段表达式表>],对表文件中指定N型字段求和,各字段间用逗号隔开。
②求和结果存入内存变量或数组,但数组必须已经存在。
③省略所有选项,则对表文件中所有N型字段求
和。
【例5-18】对学生.DBF求学生入校总分之和;对教
师.DBF教师工资总和。
USE学生
SUM入校总分TOrxzf
SELECT0
USE教师
SUM工资TOgzzh
?rxzf,gzzh&&屏幕显示:5763.0011000.00
5.4.3求平均命令AVERAGE
【命令】AVERAGE[范围][型表达式表>][FOR<条件>|WI1ILE<条件>][T0<内存变量
表》[ARRAY〈数组名〉]
【功能】在当前打开表中,对指定范围内满足条件的N
型字段求纵向平均值。
【说明】
①选择[型字段表达式表>],对表文件中指定N
型字段求平均,各字段之间用逗号隔开。
②求平均结果存入内存变量或数组,但数组必须已
经存在。
③省略所有选项,则对表文件中所有N型字段求平
均。
【例5-19】求“学生.DBF”中学生的平均年龄。
USE学生
AVERyear(date(-year(出生年月toIll
?O1&&屏幕显示:18.10
5.4.4计算命令CALCULATE
【命令】CALCULATE[范国]卜表达式表>][FOR<条件>|WHILES条件>][T0<内存变量表》
|ARRAY<数组名>]
【功能】在当前打开表中,分别计算〈表达式表》的值。
【说明】〈表达式表》由下列函数之一构成:求算术平均
值函数AVG(N型表达式);求记录数函数CNT();
求最大值函数MAX(〈表达式>);求最小值函数MIN(<
表达式》);求和函数SUM(N型表达式)。
【例5-2。】求“学生.DBF”中的入校总分最高分和最低
分;求“教师.DBF”中的工资总和与平均工资。
USE学生
CALCULATEMAX(入校总、分,MIN(入校总分
屏幕显示:MAX(入校总分MIN(入校总分
595550
SELECT0
USE教师
CALCULATESUM(工资,AVG(工资
屏幕显示:SIM(工资AVG(工资
11000.002200.00
5.4.5汇总命令TOTAL
【命令】TOTALONC关键字段名>TO汇总文件名[范围][FOR<条件
>|WHILE〈条件>][FIELDS型字段名>]
【功能】在当前表中,对指定范围内满足条件的记录按
关键字段名分类汇总求和,并生成一个新表文件(又叫
汇总文件)。
【说明】
①使用TOTAL之前,表文件必须按关键字排序或索引。
②选择FIELDS型字段名>,对指定N型字段分类求
和;省略,则对所有N型字段分类求和。
③〈关键字段名〉若为C型字段时,把与关键字相同的第一条记录的字段值存入汇总文
件中;若为N型字段,则把与关键字值相同的记录中该字段值求和后存入汇总文件中。
④如果汇总文件的字段宽度容纳不下汇总求和结果,系统将自动新表文件的N型字段宽
度以容纳汇总结果。
【例5-21】对教师.DBF表文件按性别统计工资情况,按职
称统计工资情况。
USE教帅INDEX教帅ORDERTAGxb
TOTALON性别TOxbgzFIELDS工资
USExbzg
LIST
iJLSfiftSASg赚XtWRMb
ioioiW€丁0ReaooooT
ttli(»隆•JrE3000f
USE教师INDEX教师ORDERTAGzc
LIST
TOTALON职称TOzcgzFIELDS工资
cg
•Z£
••-!
也
f*i
M0
也
孙
第8
8
fi
五、多工作区的操作
在当前工作区内对一个打开的表文件操作时,如果
再打开第二个表文件,系统将自动关闭第一个表文件,
这种只能对一个表进行的操作称为“单表操作”。在实
际运用中,常常需要对两个或两个以上的表文件进行同
时操作,这就涉及到多表操作问题。多表操作是以工作
区为基础的。
5.5.1工作区与数据工作期
1.多工作区
(1)工作区
工作区是VisualFoxPro为当前正在使用的数据表文件开辟的一个内存区。在一个工作区内
只能打开一个表文件,如果欲在同一个工作区内打开另一个表文件,系统将自动关闭前一个表文件
后再打开第一个表文件.一个表文件也只能在一个工作区内打
开。
VisualFoxPro提供了32767个工作区,各个工作区彼此独立,数据互不干扰。在任何时刻,
操作对象只能占用一个工作区,这个工作区称为“当前
工作区”。启动VisualFoxPro后,系统默认1号工作区为
当前工作区。利用选择工作区命令SELECT可以指定某
个工作区为当前工作区。
每个工作区打开的表文件都有自己的记录指针,在
当前工作区可以访问其他工作区上已经打开的表文件记
录,但不能改变其他工作区记录指针和数据。
利用以下命令,可以在指定工作区打开一个表文
件:
USE〈表文件名〉IN〈工作区号>|〈别名〉
(2)别名
用户在建立表文件时要为其命名,当打开该文件
后,还可以为它再取一个别的名字。别名可以代表工作
区号或表文件名。系统定义前10个工作区的别名分别
为:A、B、C、D、E、F、G、H、I、J。因此,用户不能
把A、B、…J这10个字母作为表文件名使用。
可以利用以下命令为表文件指定别名:
USE〈表文件名〉ALIAS〈别名〉
例如:USE学生ALIASxs&&xs是学生.DBF的别
名。
如果没有指定别名,系统默认表文件的主文件名为
别名。
例如:USE教师&&教师也是教师.DBF的别名。
在主工作区.上访问其池工作区上的数据,是实现多表文件之间数据处理的有效手段。由
于多表文件中可能存在同名字段,因此,在当前工作区调用其它工作区
中的表文件字段时,必须在其它表文件的字段名前面使用别名调用格
式以示区别。
别名调用格式:工作区号-〉字段名或:别名->字段
名或:别名.字段名
(3)选择工作区命令
【命令】SELECT〈工作区号>|〈别名〉
【功能】指定工作区为当前工作区。
【说明】
①函数SELECT()返回当前工作区的区号。
②SELECT0表示选当前未使用过的最小工作区号为
当前工作区的区号。
③当前正在操作的工作区为主工作区,在主工作区上打开的表文件是主表。所有表文件
操作命令都只能在当前工作区内进行。
④表文件操作完毕,可以使用USE命令依次关闭当前表文件;也可以使用CLOSEALL命
令关闭所有工作区的表文件。
【例5-22】工作区、别名示例。
CLOSEALL&&关闭所有已经打开表文件,回到1号
工作区
9SELECT(&&函数SELECT()返回当前工作区号为
1
USE学生&&在1号工作区打开学生.DBF
SELECT2
USE教师&&在2号工作区打开教师.DBF
DISPA.姓名,A.性别,姓名&&显示1号工作区的
姓名,性别和2号工作区的姓名
SELECT0
USE课程&&在3号工作区打开课程.DBF
2.数据工作期
数据工作期是一个用来设置数据工作环境的交互式
窗口。每一个数据工作期中包含有打开的表、表索引和
表之间的相互关系等的一组工作区。通过在数据工作期
窗口中选择工作区,就可以打开这些相关表,实现快速
查找。利用数据工作期建立的工作环境可以保存在一个
视图文件中。需要时,打开视图文件就可以恢复已经建
立的工作环境。
(1)数据工作期的组成
数据工作期由别名列表框、关系列表框和6个按钮
组成。如图5-8所示。
图5-8数据「.作期窗口
别名列表框:用来显示已经打开的表文件,并可以
从中选择当前表。
关系列表框:用来显示表文件之间的关联状态。
6个按钮:用来实现数据工作期的各种操作。
(2)数据工作期的打开
【命令】SETVIEWON
【菜单】选择“窗口”菜单一“数据工作期”。
【功能】打开已经建立的数据工作期。
【说明】命令SETVIEWOFF表示关闭数据工作期。
【例5.23】利用数据工作期窗口对表文件“教
师.DBF”、"学生.DBF”进行查询。
(1)打开“窗口”一“数据工作期”一“打开”一
选择数据库中的表“教师”一“确定”。
(2)选择“属性”按钮,一“字段筛选”教师号、姓
名、职称一“确定”。
(3)选择“数据过滤器”设置过滤条件:教师.职
称<>“讲师”一“确定”。
(4)选择“浏览”按钮,即可显示操作结果,如图
5-9所示。
图5-9查询结果之一
(5)选择数据库中的表“学生”一“确定”。
(6)选择“属性”按钮,一“字段筛选”学号、姓
名、入校总分一“确定”。
(7)选择“数据过滤器”设置过滤条件:学生.入
校总分二>580-“确定”。
(8)选择“浏览”按钮,即可显示操作结果,如图
5~10所示。
■oeonot
<eoiio5IACW
7oeoii<»[S.
图5-10查询结果之一
5.5.2表之间的关系
1.表的关联
一般情况下,各个工作区表文件的记录指针是彼此
独立,互不影响。关联在两个表文件的记录指针之间建
立一种临时关系,当一个表的记录指针移动时,与之关
联的另一个表的记录指针也作相应的移动。建立关联的
两个表,一个是建立关联的表,称为父表,另一个是被
关联的表,称为子表。
关联并不真正生成一个表文件,只是形成了一种联系,与当前表文件建立联系的表由<
别名》指定。建立关联后,在当前工作区执行了移动记录指
针的命令后,如SKIP、GO、LIST、SEEK、FIND、
LOCATE等,将引起多个工作区记录指针的移动,从而
减低命令的执行速度。因此,在没有必要关联时,应及
时取消关联。
(1)关联条件:建立关联的条件是首先为子表按某
个关键字建立索引,然后比较两个表的两个关键字段值
是否相等。当父表指针移动时,子表指针也会自动移动
到满足关联条件的记录上。
(2)一对一关系:两个表之间的一对一关系中,父
表的一个记录只能和子表的一个记录相关联,子表的一
个记录也只能和父表的一个记录相关联。例如,一个职
员有一个办公桌并且每一个办公桌被指定给一个职员。
(3)一对多关系:两个表之间的一对多关系中,父
表的一个记录可以和子表的一个或多个记录相关联,但
子表的一个记录只能和父表的一个记录相关联。例如,
每一个父亲可以有多个孩子,但每一个孩子只能有一个
父亲。
(4)多对一关系:两个表之间的多对一关系中,父
表的多个记录可以和子表一个记录相关联,但子表的一
个记录只能和父表的一个记录相关联。一般把“多”表
作为父表最简单,因为父表中的任一记录,都可以在子
表中找到唯一的记录与他联系。例如,家庭中爷爷、奶
奶、姥爷、姥姥和孙子的关系,一个孙子只有一个爷
爷、奶奶、姥爷、姥姥。
(5)多对多关系:两个表之间的多对多关系中,一
个表的一个记录和相关表的多个记录相关联。例如,一
个读者可以借了多本书,也可以是多本书对应该读者。
一般把多对多关系撤分为多对一关系或一对多关系。
2.用命令建立关联
【命令】SETRELATIONTO关联表达式1>]INTO(别名1>[[,〈关联表达式2〉]NT0<
别名2>,……]][ADDITIVE]
【功能】以当前表为父表与一个或多个子表建立关联。
【说明】
①被关联的字段必须先索引。当父表记录指针移动时,子表的记录指针定位在满足(关联
表达式>值的第1个记录上.若找不到这条记录,记录指针就指向文件尾。
②选择ADDITIVE,保留以前的关联,否则,新建立的关联将取消先前建立的关联。
③不带任何选择项的SETRELATIONTO将删除当前父表与其它子表的关联。
【例5-24]利用表文件学生.DBF、选课.DBF、课程.DBF显示学生选课的课程名称与该
课程的成绩情况。
分析:学生.DBF与选课.DBF之间可以通过学号建立关联,课程.DBF与选课.DBF之间可
以通过课程号建立关联。且在建立第二个关联时,保留第一个关联。
CLEARALL
SELECT1
USE学生
INDEXON学号TAGxh
SELECT2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年企业迎双节员工表彰大会活动方案
- 产业投资基金租赁合同
- 激光头制造工安全生产意识知识考核试卷含答案
- 物资采购 领用统计表
- 茶叶精制工操作水平知识考核试卷含答案
- 淡水鱼类养殖工操作规程水平考核试卷含答案
- 温差电电池制造工安全检查知识考核试卷含答案
- 燃气轮机运行值班员岗前班组管理考核试卷含答案
- 普通研磨工岗位新技术考核试卷含答案
- 汽车车身涂装修复工岗位常识考核试卷含答案
- 2026交投集团所属辽宁省高速公路运营管理有限责任公司操作岗招聘30人考试备考题库及答案详解
- 2026 年小学秋季开学第一课红色故事浸润少年心灵德育
- 新版部编人教版四年级上册道德与法治(课件)9安全文明上网
- 建筑公司安全生产资金投入保障制度范本
- 2026秋小学新版苏教版数学六年级上册教学设计(附目录)适用于新课标
- 新版西师版五年级上册数学全册教案(完整版)教学设计含教学反思
- 教科版2026年小学四年级科学上册全册教案
- 2026宁夏医科大学总医院自主招聘事业单位工作人员87人考试备考题库及答案详解
- 2026年道路运输企业主要负责人和安全生产管理人员考试机考题库及答案
- 2026辽宁沈阳汽车集团有限公司所属企业沈汽华制(沈阳)汽车产业服务有限公司招聘12人笔试备考题库及答案详解
- 2025年中级会计职称中级会计实务考试真题及答案
评论
0/150
提交评论