版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章查询和统计简单查询顺序查询索引查询(快速查询)统计(计数、求和、求平均)分类汇总多表操作临时关系临时关系与永久关系的区别查询与查询设计器SQL语言重要第1次第2次第3次第4次第5次第6次3
.
1顺序查询定义:所谓顺序查询就是按照记录的物理顺序或者逻辑顺序,从首记录开始按指定条件顺序搜索,将记录指针定位到第一条符合指定条件的记录上,或者将记录指针定位到文件结束标志。查找表中全部女性记录物理排序逻辑排序文件结束标志第7次
顺序查询操作可以用命令LOCATE和CONTINUE实现,也可以用限制对记录和字段访问的菜单实现。3.1.1顺序查询命令格式:LOCATE[<范围>]FOR<条件1>[WHILE<条件2>]功能:在当前表中按顺序搜索,以寻找满足指定条件的第一条记录。格式:CONTINUE功能:按照前面的LOCATE命令设置的条件继续查询.3.1顺序查询3.1顺序查询USESTUDENTINCLOCATE
FOR
性别="男"CONTINUECONTINUECONTINUECONTINUE1FFEndofFile3FT5FT7FT8FT11TFRECNO()EOF()FOUND()函数值RECCOUNT()10说明:(1)
如命令中缺省<范围>,LOCATE默认范围是表中的所有(ALL)的记录。被搜索的表不必建立索引。(2)
若LOCATE发现满足条件的记录时,记录指针将定位于该记录上,此时,RECNO()返回该记录号,FOUND()函数返回.T.、EOF()函数返回.F.。若未找到满足条件的记录,则RECNO()返回表中的记录总数加1,FOUND()函数返回.F.,而EOF()函数返回.T.。(3)
LOCATE发现一个满足条件的记录之后,可用CONTINUE命令,在表的剩余记录继续查找满足条件的下一个记录。CONTINUE命令可以重复使用,直至到达范围的边界或表尾。例查找STUDENT.DBF中,所有“王”姓学生的数据记录,
USESTUDENTLOCATEFORSUBSTR(姓名,1,2)=“王”
DISPLAYCONTINUEDISPLAY…
问题:查找所有“王”姓学生还可以用其他方法吗?例,假定STUDENT.DBF学生数据表文件中前六条记录均为男生的记录,执行以下命令序列后,RECNO()函数的值是_____。
GO3LOCATENEXT3FOR性别="男"
A)3B)4C)5D)6
例:对表STUDENT操作,查找籍贯为湖北的学生。
LOCATEFOR“湖”$籍贯
DISPLAYCONTINUEDISPLAY
又例:查找所有“王”姓学生的数据记录,输入以下命令(?):
SET
EXACT
OFFLOCATEFOR姓名=“王”
DISPCONTINUE例:查找男性且未婚的记录locatefor性别=‘男’.and.
.not.婚否displaycontinuedisplay例:查找男性五年制且1976年后出生的记录Locate
for性别=‘男’.and.学制=‘五’;.and.year(出生年月)>1976displaycontinuedisplay若要按特定的顺序定位、查看或操作记录,可以使用索引。VFP使用索引作为排序机制,为开发应用程序提供灵活性。基本概念:VFP索引是由指针构成的文件,这些指针按照索引关键字进行排序。索引文件和表文件分别存储,并且不改变表中记录的物理顺序。3.2索引与快速查询创建索引是创建一个由指向.dbf文件记录的指针构成的文件。若要按照特定顺序处理表记录,可以建立一个(或多个)相应的索引,使用索引还可以加速对表的查询操作。索引文件主要包含两部分:1.索引关键字;2.指向原表文件中与关键字相对应的记录号。索引文件索引(索引项或索引标识)保存在索引文件中。10500211050012040023040011003003903002503001602002702001801002401001记录号编号马超频0500111邵林文贺0300310宋绍明030029张小鹏010028刘巧玲020017贾贵红020026王为冬030015韩伟东010014姜瑞青040013林文灵040022苗莉050021姓名编号记录号索引标识示意结构表文件部分数据索引的类型主索引、候选索引、唯一索引、普通索引在结构复合索引文件中数据库表:主索引、候选索引、唯一索引、普通索引自由表:
候选索引、唯一索引、普通索引在单索引文件中,只有唯一索引、普通索引索引的类型
主索引(PrimaryIndex):
主索引能保证字段中输入值的惟一性,同时能决定记录的处理顺序。主索引仅适用于数据库表。在数据库中,一个表上只能建立一个主索引,如果有必要确立记录的其他处理顺序,可以添加侯选索引。主索引可以作为一对多永久关系中的“一方”。
索引的类型
侯选索引(CandidateIndex)
侯选索引与主索引具有相同的特性相同,建立侯选索引的字段可以看作是侯选关键字,所以一个表可以建立多个侯选索引。
侯选索引像主索引一样要求字段值的唯一性并决定了处理记录的顺序。在数据库表和自由表中都可以建立侯选索引。候选索引与主索引的差别:一个表只能创建一个主索引一个表可创建多个候选索引唯一索引(UniqueIndex):
唯一索引允许指定字段中出现重复值,但以该字段的首次出现值为基础,选定一组记录。再对选定的记录进行排序,输出时无重复值。
可对同一表建立多个唯一索引。普通索引(RegularIndex):
普通索引也可以决定记录的处理顺序,但允许字段中出现重复值。每一个表都可以建立多个普通索引。另外,普通索引还可以作为一对多永久关系中的“多方”。
1.单索引文件只能按照一种关键字进行索引的索引文件。其扩展名为.IDX。2.复合索引文件可按多个关键字进行索引的索引文件。其扩展名为.CDX。一个复合索引文件允许存放多个索引,用以满足一个表文件可能有多种索引顺序的要求。每个索引有一个标记(Tag)。VFP提供了两种索引文件:复合索引文件又分为:结构复合索引和非结构复合索引两种类型。结构复合索引文件:名字由系统自动分配,与表文件名相同,扩展名为.CDX。当打开表文件时,该类索引文件也自动打开。非结构复合索引文件:名字由用户给定,与表文件名不同,扩展名为.CDX。当打开表文件时,该类索引文件不能自动打开,须由用户指定打开。
建立|删除主索引命令
:格式:
ALTERTABLE
表名
ADD|DROPPRIMARYKEY
索引关键字[tag索引标识名]
其中:
ADD用于添加主索引,DROP用于删除主索引。缺省TAG短语时表示索引关键字与字段同名。例如:为数据库表student添加以学号字段为索引关键字的主索引。可用命令:Altertablestudentaddprimarykey
学号由于一个数据库表只有一个主索引,所以删除主索引不必指明索引关键字。例如,删除数据库表student主索引的命令为:Altertablestudentdropprimarykey用命令建立索引
命令方式
:格式:
INDEXON索引关键字
TO
单索引文件名
|TAG
索引标识名
[OF非结构复合索引文件名][FOR条件][unique][additive][ascending][descending]
功能:按索引关键字表达式建立一个符合条件的索引文件。利用该文件可以按照某种逻辑顺序显示或访问表记录。
用命令建立索引说明:
◆ON索引关键字
:指定索引表达式◆TO单索引文件:建立一个单独的索引文件,系统默认扩展名.IDX。◆TAG索引标识名:在一个结构复合索引文件中建立多个索引,其索引文件名与表名相同,扩展名.CDX。◆OF非结构复合索引文件名:指定生成非结构复合索引文,其索引文件名由用户指定,扩展名“.CDX”◆FOR
条件:只对满足条件的记录进行索引。◆unique:建立唯一索引。(只将索引表达式值相同值的首记录放入索引文件中)◆ADDITIVE
所有先前已打开的索引文件保持打开状态,否则,关闭先前已打开的索引文件(结构复合索引文件除外)。◆ASCENDING
或DESCENDING
说明建立升序或降序索引,默认升序。
◆单索引文件的索引关键字只能是N、C、D型字段。
◆单索引文件索引关键字表达式为多个关键字组合(称为多重索引)时,要用字串连接符“+”号连接起来,并且类型要一致。若是N和D型数据,须用STR()和DTOC()函数将其转化成C型。多重索引时,排在最前面的为主索引关键字。排序时,先排主索引关键字,再排第二关键字,以后依次类推。例:①对表STUDENT操作,按姓名(升序)建立单索引文件姓名.idx。
②对表score操作,按计算机(降序)建立单索引文件JSJ.idx。SELECT1 USESTUDENT
INDEXON姓名
TO姓名
BROWSE use
score
in
0 select
score INDEXON-计算机
TO
jsj
&&单索引文件中,只能对数值型字段做降序操作。
BROWSEdir*.idx例:建立结构复合索引文件,其中包括2个索引:①记录按姓名降序排列,索引标识为普通索引。②记录按性别升序排列,性别相同时按专业升序排列,索引标识为普通索引。USESTUDENTINDEXON
姓名TAGXMdescList&&记录已按姓名降序排列INDEXON性别+专业TAGxbzyList*记录已按性别升序排列,性别相同时按专业升序排列DIR*.CDXBROWSE例:建立以专业索引的非结构索引文件SZY.DBF,其中一个索引:记录按专业升序排列,专业相同时按出生年月升序排列。DIR*.CDXUSESTUDENTINDEXON专业+dtoc(出生年月)TAGzycsOFSZY*如果是ON专业+dtoc(出生年月)desc则同为降序排列DIR*.CDXBROWSE在表设计器中建立索引(1)打开数据库表STUDENT.DBF。
(2)在弹出的“表设计器”对话框中,单击“字段”选项卡,在“索引”框中选择索引为升序或降序。(3)单击“索引”选项卡,在“索引名”框中,键入索引标记或保留原索引名。
(4)在“类型”列表中,选定索引类型。
(5)在“表达式”框中,键入作为记录排序依据的字段名,或者单击表达式框后的按纽,在“表达式生成器”对话框中,建立表达式。
(6)如果希望有选择的输出记录,可在“筛选”框中输入筛选表达式,或者单击筛选表达式框后的按纽,在“表达式生成器”对话框中,建立筛选表达式。
(7)选中“确定”按纽。
(1)打开已建好索引的表,单击【显示】菜单的“浏览”命令。
(3)在“表”菜单中选中“属性”命令,系统弹出“工作区属性”对话框。
(4)在“索引顺序”框中,选中某一索引。
(5)单击“确定”按纽。显示在“浏览”窗口中的表将按照索引关键字(姓名)指定的顺序排列记录。3.2.1.3激活索引对记录排序对STUDENT.DBF表中的性别和出生年月进行排序。
(1)在表设计器的“索引”选项卡单击“插入”命令按钮;(2)在”索引名“框中,输入索引名,如性别。
(3)在“类型“框中,选择索引类型,如普通索引。
(4)单击“表达式”框右边的按纽,系统弹出“表达式生成器”对话框。(5)在对话框中输入索引表达式“性别+CTOD(出生日期)”,最后单击“确定”按钮。3.2.1.4多个字段索引(5)在“表达式生成器”对话框的“表达式”框中,输入表达式:性别+DTOC(出生年月)
(6)选中“确定”按纽。(7)在“表”菜单中选中“属性”命令,在“工作区属性”窗口中,选“索引顺序”的“student:性别”,单击“确定”,显示表达式“性别+DTOC(出生年月)”排序的结果。
1.打开索引文件
与表名相同的结构索引在打开表时都能自动打开,但是对于非结构索引必须在使用之前打开索引文件。格式1:USE
表名[INDEX〈单索引文件名〉]
[ORDER<索引顺序号>|
[TAG]<索引标记名>[OF<非结构复合索引文件名>][ASCENDING|DESCEDING]3.2.1.5.使用索引文件说明:
(1)在格式1中,命令USE表名
INDEX索引文件名,打开表文件的同时打开单索引文件或非结构复合索引文件,并指定复合索引文件中的主控标识.。(2)在格式1中,命令USE表名ORDER
标记名,或USE表名
ORDER[TAG]标记名,打开表文件的同时打开结构复合索引文件,并指定复合索引文件中的主控标识.格式2:
SETINDEXTO[单索引文件列表]格式3:
SETORDERTO<索引标记名>|<索引序号>[OF<非结构复合索引文件名>][ASCENDING|DESCEDING]][ADDTIVE]说明:在格式2、3中,必须先打开表文件和相关的索引文件:SETINDEXTO〈索引文件列表〉:指定要打开的一个或多个索引文件列表,该列表中各索引文件用逗号分隔.其中可以包含任意个.IDX或非结构索引文件名。
SETORDER
TOTAG〈索引标记名〉:指定结构索引文件中的一个标识作为主控标识。(3)SETORDERTOTAG〈索引标记名〉OF〈CDX索引文件名〉,指定非结构复合索引文件中的一个标记作为主控索引标识。例:打开表文件,同时打开单索引文件姓名.IDXUSE
STUDENT
INDEX
姓名
LIST例:先打开表文件,再打开单索引文件jsj.IDXUSESTUDENTSETINDEXTOjsj
LIST例:打开表文件和结构复合索引文件,并按“姓名”索引排序.
USE
STUDENT
ORDERXMLIST例:先打开表文件,再按性别专业排序。
USESTUDENTSETORDERTOxbzy例:打开表文件和以专业和出生年月为索引的非结构复合索引文件SZY.CDX,再指定以专业和出生年月
为主控索引。USE
STUDENT
INDEXSZYSETORDERTOzycs如果打开表文件时没有打开与之相关的单索引文件或非结构复合索引文件,则修改表文件中的数据时,相关的单索引文件或非结构复合索引文件必须用“重新索引”命令修改,其命令格式如下:
REINDEX
功能:按照修改后的表自动修改与之相关的单索引文件和复合索引文件。注意:执行上述命令前,必须先打开表文件和与之相关的索引文件。3.2.1.6索引文件的修改1.关闭索引
格式:(1)CLOSEINDEXS
(2)SETINDEXTO
功能:两者都是关闭除结构化复合索引文件外的所有索引文件。2.删除索引字段删除索引字段可以在表设计器中进行,也可以用命令,其格式是:
DELETETAGTagName
删除由TagName指定的索引。或DELETETAGALL
删除全部索引。3.2.1.7索引文件的关闭例:分别按性别、姓名排序,再删除索引标识。(设表中已经建立了性别、性别和专业的复合索引XB和xbzy)USESTUDENTBROWSE
SETORDERTO1&&或者SETORDERTOXmBROWSESETORDER
TO2&&或者SETORDERTOxbzyBROEWSEDELETAG
xm&&删除性别字段的索引标识“XB”DELETAG
ALL&&删除全部索引标识快速查询就是索引查询。与顺序查询相比,索引查询因其速度快而被广泛采用。VFP系统提供了两条快速(索引)查找记录命令:FIND、SEEK。3.2.2.1FIND命令格式:FIND<表达式>功能:索引查找某个表,将记录指针指向与表达式相匹配的第一条记录。3.2.2快速查询说明:(1)参数<字符表达式>:可以是数值型常量或字符变量;如果是字符变量,则应在该变量前加宏代换函数“&”。(2)要求当前表已经建立了索引,且表达式之值必须是表中索引关键字的值。(3)如果找到匹配的记录,则RECNO()函数返回匹配记录的记录号,FOUND()函数返回.T.。而EOF()函数返回.F.;如果未找到匹配的记录,则RECNO()函数的返回值等于表的记录数加1,FOUND()函数返回.F.。而EOF()函数返回.T.。说明:(4)FIND命令只能将记录指针定位于与索引关键字相匹配的第一条记录,要继续查找下一个匹配记录,则需用SKIP命令。若要显示该记录的内容,可用DISPLAY命令。(5)FIND命令查找字符串时。该字符串可以用定界符将字符串括起来,也可以省略定界符。但是,如果该字符串本身就包含单引号、双引号和方括号,就必须用另一种定界符将字符串扩起来。格式:SEEK<表达式>功能:索引查找某个表,执行该命令将记录指针指向与指定表达式值相匹配的第一条记录。说明:SEEK命令的操作与FIND命令类似。但是,当<表达式>为字符型内存变量是SEEK命令不能用&函数;<表达式>可以是字符型、数值型、日期型数据,如果是字符常量时,必须用定界符将字符串括起来。3.2.2.2SEEK命令例:在STUDENT表中搜索查找学制为五年制的学生。INDEXON学制
TOXZFIND五&&或者FIND“五”,或者SEEK“五”?FOUND(),EOF()DISPSKIP例:搜索查找出生年月为10/13/76的记录。INDEXON出生年月
TODASEEKCTOD(‘10/13/76’)
&&或者SEEK{^1976/10/13}FIND{^1976/10/13}&&出现“数据类型不匹配”错误DISP例:搜索查找性别为男,且是79年11月3日出生的记录。
USESTUDENTINDEXON
性别+DTOC(出生年月)
TOXBCFIND
“男11/03/79”&&或者FIND“男”+“11/03/79”例:搜索查找临床医学专业女学生。
INDEXONALLTRIM(专业)+性别
TOXBZYseek‘临床医学女’display例:查找98级男学生,显示前两名记录的学号(C型)、姓名、籍贯。indexon
LEFT(学号,2)+性别TAGXHXBDESCFIND
98男listnext
2
学号,姓名,籍贯或者Index
on
LEFT(学号,2)+性别TOXHXBSeek“98男”&&必须用定界符括起来Display
学号,姓名,籍贯SkipDisp学号,姓名,籍贯例:查找“王”姓的同学(模糊查询)SET
EXACT
OFFUSESTUDENTORDERXMFIND
王&&或者SEEK“王”DISPLAYName=“王”FIND&NAME&&或者
SEEKNAMEDISPLAYSETEXACTONFIND王&&或者SEEK“王”DISPLAY&&查询无结果,除非表中有姓名是“王”的记录3.3统计—计数
COUNT
[Scope][FOR<条件>][TO<内存变量>]功能:在指定范围内,统计满足条件的记录个数说明:本命令的默认范围是ALL;
例,执行下列语句后,变量A1,A2,A3,A4,A5分别是什么?USESTUDENT&&表中学号字段是字符型COUNTCOUNT
TOA1COUNTTO
A2FOR
性别=“男”COUNTFORLEFT(学号,2)=“96”TOA3COUNTFORleft(学号,2)=“98”ORleft(学号,2)=“99”
TOA4COUNTTOA5FOR
!婚否3.3统计—求和SUM
[<表达式表>][Scope]
[FOR<条件>]
[TO<内存变量表>
|TO
ARRAY
数组]功能:在指定范围内,按照表达式表的要求,对满足条件记录的数值型字段求和。说明:本命令的默认范围是ALL;当缺省表达式表时,将对当前表中所有数值型字段求和;当缺省TO内存变量表时,求和结果不予保存;当表达式表
和内存变量表
都选择时,表达式表中的表达式数目必须与内存变量表中的变量数目相等;3.3统计—求和USESCORESUMSUM
生物,化学SUM
生物,化学TOSW,HXSUM
生物,化学TOSW,HXFORLEFT(学号,2)="98"Settalkon
3.3统计—求平均AVERAGE[表达式表][Scope][FOR<条件>]
[TO
内存变量表|TOARRAY数组]功能:在指定范围内,按照表达式表的要求,对满足条件记录的数值型字段求平均值。说明:本命令的默认范围是ALL;当缺省表达式表时,将对当前表中所有数值型字段平均值;当缺省TO内存变量表时,求和结果不予保存;当表达式表和内存变量表都选择时,表达式表中的表达式数目必须与内存变量表中的变量数目相等;例:1.分别统计student.dbf中男生和女生的人数;2.分别求score.dbf中98级、99级学生的计算机、英语的平均成绩.(保存在数组A和B中)UsestudentCountfor性别="男"
TOMCountfor性别<>"男"
TOF?"男生的人数是:",
M?"女生的人数是:",FAver计算机,英语forleft(学号,2)=“98”toarrayaAver计算机,英语
forleft(学号,2)=“98”toarrayb?“98级计算机成绩:",A1(1),"98级英语成绩:",A1(2)?“99级计算机成绩:",B1(1),"99级英语成绩:",B1(2)思考:怎样用一个COUNT命令统计表中男、女生之和?怎样统计表中姓名不包含“王”的学生人数?例:计算SCORE表中四门课程的平均值,并在表末尾增加一空记录,将学号用“平均分”填充,各门课程平均分填入相应字段。USE
SCOREAVERAGETOA,B,C,D&&学号字段必须是字符型APPEND
BLANK
REPLACE
学号WITH“平均分”,生物
WITHA,;
化学
WITHB,计算机WITHC,英语WITHDBROWSE3.3统计—分类汇总TOTALTO〈表文件名〉ON〈表达式〉
[FIELDS字段名表][Scope][FOR
〈条件〉]功能:对当前表中的数值型字段进行汇总说明:本命令的默认范围是ALL;如缺省字段名表,则对所有数值型字段进行汇总,否则,仅对字段名表中的数值型字段汇总;在汇总前,表中记录必须物理有序或者逻辑有序,且汇总表达式必须是有序的依据中的一部分或者全部。了解3.3统计—分类汇总说明字段名的值域必须是有限个,且数量比较少;汇总结果表的结构与当前表的结构一样;汇总结果表中的记录数与字段名的值域中个数是相等的;汇总结果以表的形式保存在表中,因此,需打开结果表浏览,才能看到汇总结果;注意:本命令中的字段名表,不对汇总结果表起作用,而仅仅是限制需汇总的数值型字段;当汇总溢出时,用“*”代替3.3统计—分类汇总USESCOREIN0SELECTSCORESETORDERTOZYTOTALONZYTOT1USET1IN0SELECTT1BROWSE假设在SCORE表结构复合索引文件中,有三个索引标识:XH→学号、ZY→专业、XB→性别3.4多表操作有关概念的回顾:工作区:在内存中,为表操作而开辟的一块区域。工作区号:1-32767工作区码:A、…、J、W11、…、W32767当前工作区:注意:启动VFP后,1号工作区为当前工作区;当前表当前记录非常重要本节内容的应用是对前面所学内容的综合运用3.4多表操作—别名表的别名:在工作区中,打开一个表后,系统立即赋予一个可引用该表的名字默认别名:表的默认别名就是表名指定别名:在USE命令中使用ALIAS子句表别名的用途主要体现在多表操作中:在当前工作区中,可引用其它工作区中表的字段;可选择别名所对应的表所在的工作区作为当前工作区;3.4多表操作—别名格式1:TableAlias.FieldName (小数点)格式2:TableAlias->FieldName (减号加大于号)格式3:WorkArea
.FieldName (小数点)格式4:WorkArea
->FieldName (减号加大于号)说明:在格式3和格式4中,WorkArea只能是工作区码,不能是工作区号。例如:假设表STUDENT和表SCORE已分别在A工作区和B工作区中打开,当前工作区为A区。
LISTFIELDS
学号,姓名,SCORE.生物,SCORE->化学,B.计算机,B->英语3.4当前工作区的选择可视方法:在数据工作期中,选择表即可选择该表所在的工作区(只能选择有表的工作区)命令方法:格式1:SELECT
WorkArea
格式2:
SELECT0格式3:
SELECT
TableAlias
功能:当前工作区选择。说明:格式2的功能是选择编号最小的空闲工作区为当前工作区;当工作区中无表时,请用格式1或者格式2;当工作区中有表时,请用格式1或者格式3;3.4当前工作区的选择SELECT
31#A2#B3#C4#D5#Estudentscoreliberregister请思考当前工作区?USEstudentSELECTBUSEscoreSELECT5USEbookALIASliberSELECT0USEregisterSELECTliberBROWSE1#A2#B3#C5#E1#A2#B3#C5#E5#E3.4数据工作期定义:表单、表单集或报表所使用的当前动态工作环境的一种表示。每一个数据工作期包含有自己的一组工作区。分类:默认数据工作期(公共数据工作期)专用数据工作期(私有数据工作期)功能:打开或显示表或视图;建立临时关系;选择当前工作区;设置工作区属性(在工作区属性窗口中,单击“修改”按钮,还可进入表设计器修改表结构)。进入:在“常用”工具栏上选择“数据工作期窗口”按钮;选择“窗口”菜单的“数据工作期”命令;3.4数据工作期窗口布局当前工作期:显示当前数据工作期的名称或选择当前数据工作期。别名区:显示当前数据工作期中,所有已打开的视图和表的别名。关系区:表明临时关系,这个关系是在“别名”框中的表或视图之间建立的。按钮区:状态显示区:3.4数据工作期窗口按钮显示“工作区属性”对话框,在该对话框中可以:单击“修改”按钮,进入表设计器,修改表的结构;定义数据过滤器;定义、激活、关闭活动字段表(相当于全局的字段名表);选择或取消主控索引;在“浏览”窗口中显示在“别名”框中选择的表或视图,在该窗口中可以检查、编辑或追加数据。显示“打开”对话框,与“添加表或视图”对话框相似,可以选择要打开的表或视图。从“别名”框中移去选中的表或视图,以及任何相关的文件。 使用“表达式生成器”,定义表或视图之间的一对一的临时关系。
当两个表之间没有定义索引顺序时,对话框会在“表达式生成器”对话框之前显示“设置索引次序”对话框。显示“创建一对多关系”对话框,在该对话框中可以在子表和父表之间建立一对多临时关系。使用方法:选择一对一关系中的父表,再单击本按钮就可将一对一关系改为一对多关系(双线)。属性:显示“工作区属性”对话框,在该对话框中可以:单击“修改”按钮,进入表设计器,修改表的结构;定义数据过滤器;定义、激活、关闭活动字段表(相当于全局的字段名表)选择或取消主控索引;在“浏览”窗口中显示在“别名”框中选择的表或视图,在该窗口中可以检查、编辑或追加数据。显示“打开”对话框,与“添加表或视图”对话框相似,可以选择要打开的表或视图。从“别名”框中移去选中的表或视图,以及任何相关的文件。使用“表达式生成器”,定义表或视图之间的一对一的临时关系。当两个表之间没有定义索引顺序时,对话框会在“表达式生成器”对话框之前显示“设置索引次序”对话框。显示“创建一对多关系”对话框,在该对话框中可以在子表和父表之间建立一对多临时关系。使用方法:选择一对一关系中的父表,再单击本按钮就可将一对一关系改为一对多关系。3.4临时关系定义:是两表之间的一种关系,这种关系根据两表公共关键字的对应关系,能逻辑链接在不同工作区打开的两个相关表,使这两个表从逻辑上联接成一个大表,方便从不同表中提取相关数据。作用机理:临时关系通过父表中记录指针的移动,再根据两表的公共关键字的对应关系,而自动控制子表中记录指针的移动。父表:在临时关系中起主导作用的表;也称主表或主控表。子表:在临时关系中受父表控制的表;也称从表或受控表。效果:通过这种指针的联动关系,可从父表、子表的当前记录中,收集到能全面反映一个个体的完整数据或者所需要的与一个个体有关的分布在各表当中的离散数据。3.4临时关系的类型
临时关系的类型指的是两表之间记录指针联动的方式。 假设在子表中有多重记录与主表中的一条记录相对应:一对一的临时关系当主表中的记录指针移动时,子表中记录指针只指向多重记录的第一条一对多的临时关系当主表中的记录指针移动时,子表中记录指针将按顺序指向多重记录的第一条、第二条、…,而保持主表记录指针不动,直到子表中的记录指针扫过多重记录后,主表指针才能继续移动。3.4一对一的临时关系3.4一对多的临时关系3.4建立临时关系建立步骤:打开父表;打开子表;选择子表所在的工作区;激活子表的索引:若子表无索引,则建立索引;选择主表所在的工作区;建立从父表到子表的一对一的临时关系;或者建立从父表到子表的一对多的临时关系;建立方法可视方法:数据工作期命令方法:SETRELATIONTO3.4可视方法进入数据工作期窗口:选择“打开”按钮,分别打开两个表;在“别名”区,单击子表(相当于选择子表所在的工作区)scorestudent学号单击“属性”按钮,为子表在“工作区属性”对话框的“索引顺序”框中,选择主控索引;在“别名”区,单击父表(相当于选择子表所在的工作区)单击”关系“按钮,再单击子表,在表达式生成器中选择关键字,完成临时关系的建立;3.4有关命令SETRELATIONTO <表达式1>INTO<WorkArea1|TableAlias1> [,<表达式2>
INTO<WorkArea2|TableAlias2>]...
[ADDITIVE]功能:建立从父表到子表的临时关系。说明:格式中的所有WorkArea:只能为工作区码WorkArea1、TableAlias1:指定子表所在的工作区WorkArea2、TableAlias2:指定子表所在的工作区ADDITIVE:保留已有的临时关系3.4命令方法若使用结构复合索引存在CLOSEALLUSEstudent
IN
0USEscoreIN0
ORDERxhSELECTstudentSETrelationto学号
intoscorestudentscore学号CLOSEALLSELECT0USEscoreINDEX
ON
学号TAGxhSELECT0USEstudentSETrelationto学号
intoscore不存在3.4命令方法CLOSEALLUSEstudentIN
0USEscore
IN
0
INDEX
xhSELECTstudentSETrelationTO
学号
INTOscore若使用单索引CLOSEALLSelect0USEscoreIndexON
学号TOxhSelect0Usestudentsetrelationto学号
into
score存在不存在3.4检验方法建立临时关系的关键两表必须有公共字段,且该公共字段的名字、类型、宽度在两表中必须一致。临时关系建立后的检查方法分别打开两表的数据窗口在主表的数据窗口移动记录指针,如果子表的数据窗口中的记录发生相应的变化,则临时关系正确,否则,不正确。临时关系的使用关键:必须在主表中移动记录指针,子表的记录指针才能跟随移动;反过来,临时关系不起作用。3.4临时关系的应用例,1.在student表中增加“总分”和“平均分”字段,分别用score表中的生物、化学、计算机和英语成绩的总和与平均成绩填充。2.显示总分前三名记录的学号,姓名,籍贯,总分.(p104-二)Altertablestudentadd总分n(6,2)Altertablestudentadd平均分n(6,2)Select2USEscoreIndexon学号to学号selectstudentSETrelationTO学号intoscoreReplaceall总分withb.生物+b.化学+b.计算机+b.英语
,
平均分with总/4Indexon总分desctagzfLISTnext3学号,姓名,籍贯,总分3.4临时关系的应用从student表和score表中,提取生物、化学均不及格的学生名单wwe.dbf(表中只有这些学生的学号、姓名、生物、化学成绩)CLOSEALLSelectBUSEscoreindexon学号TOxhSeleAUSEstudentSETrelationto
学号into
B
&&建立临时关系Copytowwefields
学号,姓名,score.生物,b.化学;
FORb.生物<60ANDb.化学<603.4临时关系的应用在student表中,增加一个奖学金字段(L,1),并使score表中平均分>90的学生获得奖学金。(P104-二.4)Replace奖学金WITH.t.;FOR(b.生物+b->化学+b.计算机+b.英语)/4>=90Select2UsescoreIndexon学号toxhselectstudentSetrelationto学号intoscore
&&建立临时关系CloseallAltertablestudentadd奖学金L
&&增加“奖学金”字段3.4临时关系的应用rosterregisterbookrosterregisterbookSelect
0Use
rosterSelect
0USE
registerSetorder
tojsdmSelect0UserosterSetordertojcbm教师代码jsdm教材编码jcbmCLOSEALLSelectrosterSetrelato教师代码intoregisterSelectregisterSetrelato教材代码intobookADDITIVESELECTroster3.4临时关系的应用rosterregisterbookregisterSELECTAUSE
rosterindexon
教师代码to
jsdmSELECTbUSEregisterSELECTCUSE
bookindexon教材编码tojcbm教师代码jsdm教材编码jcbmrosterbookCLOSEALLSETrelato
教师代码intoASETrelato教材编码intoC
ADDILISTA.姓名,教师代码,C.教材编码;
forleft(教师代码,2)=“02"3.4临时关系的应用思考题:请分别用可视化方法、命令方法,用临时关系实现右图所示三表之间的逻辑联接。右图所示的三表之间的逻辑联接能否实现?如果能,请写出命令如果不能,请说明理由?rosterregisterbook教师代码教材编码rosterregisterbook教师代码教材编码主关键字:表中的一列或多列,其中的值唯一地标识了表中的一行;外部关键字:一列或多列的组合,列中的值需要与另一个表中的主关键字相匹配。用于联接相关表;定义:通过主关键字和外部关键字组成的联接条件,实现的两个库表之间的一种链接,即“永久关系”,它是两个库表中,具有相同从属关系的数据之间的联系纽带。永久关系永久关系
永久关系并不能控制各表内记录指针间的关系(使用永久关系不能实现在一个表中移动记录指针,从而改变另一个表中的指针的功能,但是临时关系可以实现)。适用范围1.用于参照完整性,控制记录在相关表中被插入、更新或删除的方式;2.当在“查询设计器”或“视图设计器”中,自动作为默认联接条件;3.在“数据环境设计器”中,将参考永久关系,自动生成表之间的相应的临时关系。永久关系特点:这种关系一旦建立,就一直存在于数据库之中,当打开数据库时,就开始起作用。拥有永久关系的表必须是库表。类型:一对一:主表中的每一个记录只与相关表中的一个记录相关一对多:主表中的一个记录与相关表中的多个记录相关联注意:主索引、候选索引可作为“一”方,而唯一索引、普通索引可作为“多”方;永久关系表示方法:
用一根连接父表的索引标识到子表的索引标识的连线来表示两表之间的永久关系。建立方法:
在数据库设计器中,将父表的主索引标识或候选索引标识左拖到子表的索引标识上。删除方法:按<Del>、<Backspace>键即可删除;右击连线,选择快捷菜单中的“删除关系”命令;编辑方法:单击连线,在“数据库”菜单中,选择“编辑关系”命令右击连线,选择快捷菜单中的“编辑关系”命令定义:通过建立一组规则,并在规则的限制下,制定记录如何在相关表中被插入、更新或删除的方式,以确保数据的正确性、相容性和一致性。建立途径:参照完整性生成器:确定要实施的规则类型、要实施规则的表以及会导致VFP检查参照完整性规则的系统事件;并将自动生成的代码作为触发器保存在存储过程中。编写触发器和存储过程代码来实施参照完整性。参照完整性参照完整性—生成器进入方法:方法一:单击对话框中的“参照完整性”按钮双击连线,进入“编辑关系”对话框方法二:右击连线,在快捷菜单中选择“编辑参照完整性”命令方法三:单击连线,在“数据库”菜单中选择“编辑参照完整性”命令设置参照完整性规则
更新规则删除规则插入规则当父表中的关键字值被修改时当父表中记录被删除时当在子表中插入或更新记录时级联用新的关键字值更新子表中的所有相关记录删除子表中所有相关记录限制若子表中有相关记录则禁止更新若子表中有相关记录则禁止删除若父表中不存在匹配的关键字值,则禁止插入忽略允许更新,不管子表中的相关记录允许删除,不管子表中的相关记录允许插入参照完整性生成器参照完整性设置完毕,单击“确定”按钮,再连续两次单击“是”按钮,确认生成完整性代码;3.4临时关系与永久关系的区别临时关系可发生在自由表之间、库表之间、自由表与库表之间;而永久关系只能发生在库表之间。临时关系不属于数据库;而永久关系属于数据库。临时关系是在需要才建立,且可随时撤消,并不影响表中的数据;而永久关系建立后,不能随意撤消,否则,将影响数据的完整性。临时关系可根据父表记录指针的移动,而自动控制子表中记录指针的移动;而永久关系并不控制记录指针的移动。1.例:
新建一个数据库ABC,在其中建立如下所示的永久关系
2.在数据库ABC中,按如下要求建立完整性规则:
(1)
当在BOOK表中删除记录时,REGISTER表中的所有记录自动删除(2)当更新BOOK表中某除记录的教材编码时,REGISTER表中的所有相关记录也同样修改(3)当在REGISTER增加新记录时,BOOK表中必须有相关记录REGISTERBOOK创建数据库ABC.DBF,建立它们之间的永久关系设置参照完整性规则利用表单向导创建表单,表单内容有:学号,姓名,专业,生物,化学,计算机,英语,平均分创建数据库student.dbc,添加student表和score表2.建立两个表之间的永久关系3.单击“新建”按钮,选择“表单”4.单击“向导”按钮,选择“一对多表单向导”,单击“确定”5.在“一对多表单向导”的指导下,分别选择主表的字段:学号,姓名,专业和子表的生物,化学,计算机,英语,平均分6…运行表单.作业:用表单设计器创建具有以上内容的表单jbqk.scx3.5查询与SQL语言查询:是从一个数据库中检索信息的一个请求,该请求使用一些条件提取特定的记录,并将这些记录按要求以集合的形式作为结果返回给用户。建立查询的方法SELECT-SQL命令:SELECT-SQL命令是VFP所支持的结构化查询语言(StructureQueryLanguage—,SQL)中的一条命令;查询设计器:通过可视化的界面设计“查询”,并可把“查询”保存在.QPR文件中;查询设计器与SELECT–SQL命令的关系查询设计器实际上是设计一条SELECT–SQL命令的可视化方法;非常重要本节内容是等级考试的重点之一也是本课程的考试重点之一3.5查询设计器进入查询设计器的方法可视方法调出“新建”对话框“文件”菜单的“新建”命令“常用”工具栏中的新建按钮在“新建”对话框中“文件类型”框中,单击“查询”。单击“新建”按钮,直接进入查询设计器单击“向导”按钮新建查询命令
CREATE
QUERY
查询文件名打开查询命令
MODIFY
QUERY
查询文件名3.5一个简单查询例如:查询STUDENT表中的所有内容进入查询设计器为查询定义数据源STUDENT.DBF在“字段”选项卡中,选择所有字段运行查询获取与该查询等价的SELECT—SQL命令进入“查询”窗口(只读型窗口,显示等价的SELECT-SQL命令)选择“查询”菜单中“查看SQL”命令在查询设计器的快捷菜单中“查看SQL”命令将窗口中的SELECT命令复制到剪贴板条件的类型条件类型说明=指定字段值等于右边的实例Like指定字段与实例文本相匹配。(在LIKE后面使用的通配符是%)==指定字段与实例文本必须逐字符完全匹配>(>=)指定字段大于(大于或等于)实例文本的值<(<=)指定字段小于(小于或等于)实例文本的值IsNull指定字段包含null值Between指定字段大于等于示例文本中的低值并小于等于示例文本中的高值。实例文本中的这两个值用逗号隔开。如,“Between(JS.CSRQ,{01/01/1950},{01/01/1960})”与出生日期在1950年1月1日至1960年1月1日的教师记录相匹配IN指定字段必须与实例文本中逗号分隔的几个样本中的一个相匹配在“条件”列表中,除了常用的关系运算符外,还有:l
Like:意为在字段名框列出的字段值与实例框中给出字段值或样本值执行不完全匹配,它主要是针对字符类型的。如查询条件为
Like%王(匹配姓名中最后一个字是王)
LIKE王%(匹配姓名中第一个字是王)
LIKE%王%(匹配姓名中包含王)l
IsNull::指定字段必须包含NULL值。Between(在中间):意为输出字段的值应大于或等于实例框中的最小值,而小于或等于实例框中的最大值。在实例框中最小值在前,最大值在后,中间以逗号分隔。
IN(在…之中):意为输出字段的值必须是实例框中给出值中的一个,在实例框给出的各值之间以逗号分隔。
1.查询student表中女性的七年制和女硕士,可构造如下条件:性别=“女”AND(学制=“七”OR
学制=“硕”)或者:性别=“女”AND学制=“七”OR
性别=“女”AND
学制=“硕”查询STUDENT表和SCORE表中年龄<22岁,英语成绩在85~95之间的记录2004-year(出生年月)>22and
英语between(85,95)
3.5.2.3查询记录的筛选(3)在“实例”列表中输入比较值,如:临床医学(4)若要在搜索字符数据时忽略大小写,可单击大小写下的按钮。(5)如果希望对逻辑操作符的含义取反,可以选中否按钮,如查找非“临床医学”专业的学生,则应选中该按钮,则可构造出如下条件表达式:
Student.专业NotLike临床医学(6)在“实例”文本框输入值时,必须注意:除非字符串同查询中的字段名相同,否则不用把字符串用引号括起来。
(7)日期必须用花括号括起来,如:1980年1月12日应写为:{^1980//01/12}(8)逻辑值的前后必须使用句点号,如:.T.。
查找满足多个条件的记录,可以在“筛选”选项卡中添加多个条件并在“逻辑”列表中选择他们之间的关系。默认的逻辑关系(无)自动以“与”(AND)的方式组合起来。查找的记录满足两个以上条件中的任意一个,则需用“或”(OR)操作符将这些条件组合起来。3.5查询的保存将在查询设计器中设计的查询保存到一个文件中,将来:可运行、修改等;保存查询的方法“文件”菜单中“保存”命令“文件”菜单中“另存为”命令注意:查询文件的保存地点3.5查询的运行 查询的运行:实际上就是数据库发出一条查询请求,并返回查询后的结果集。可视方式:进入查询设计器窗口,并:“程序”菜单的“运行”命令“常用”工具栏中的“运行”按钮命令方式:在命令窗口发布命令:DO
QueryFileName.QPR &&扩展名不能省略注意:必须将在查询设计器中设计的查询保存在一个查询文件中直接在命令窗口发布等价的SELECT–SQL命令3.5查询的修改在查询设计器中修改查询调出“打开”对话框选择“文件”菜单的“打开”命令单击“常用”工具栏中的“打开”按钮在“打开”对话框中“文件类型”框中,选择“查询”。选择所需修改的查询文件(扩展名.QPR);单击“确定”按钮,进入查询设计器,修改查询。3.5查询设计器窗口组成顶部窗格:为查询指定数据源及多数据源之间的联接条件字段:从数据源中,指定能出现在结果集中的列(可为字段、表达式(在表达式中,应注意合计函数:COUNT()、SUM()、AVG()、MAX()、MIN()的使用);筛选:指定记录出现在结果集中的条件;排序依据:指定结果集中的字段或表达式,排序结果集;分组依据:指定数据源中的字段或表达式,用于把表中有相同值的记录合并为一组,形成一条记录出现在结果集中;杂项:是否允许结果集中出现重复记录;还可限制每批次查询的记录数(全部记录、最大数目或百分比);联接:指定联接表达式,用它来匹配多个表或视图中的记录;3.5查询设计器—“查询”菜单添加表:显示“添加表或视图”对话框,指定数据源。移去表:从设计器中移去所选定的表。移去联接条件:移去所选中的表联接线。输出字段、联接、筛选、排序依据、分组依据、杂项查询去向:显示“查询去向”对话框,该对话框允许把查询结果发送到七个不同的输出目的地。查看SQL:在只读的“查询”窗口中,显示等价的创建查询或视图的SQL语句。运行查询:执行所建立的SQLSELECT语句,并向所选定的输出目的地发送结果。快捷键:CTRL+Q3.5查询设计器—快捷菜单右击窗口,弹出快捷菜单运行查询:执行所建立的SQLSELECT语句,并向所选定的输出目的地发送结果。快捷键:CTRL+Q查看SQL:在只读的“查询”窗口中,显示等价的创建查询或视图的SQL语句。移去表:从设计器中移去所选定的表。添加表:显示“添加表或视图”对话框,指定数据源。输出设置:显示“查询去向”对话框,该对话框允许把查询结果发送到七个不同的输出目的地。3.5结构化查询语言定义:是一种数据查询和编程语言(StructuredQueryLanguage—SQL)。在VFP中,支持结构化查询语言命令,并以独特高效的Rushmoretechnology优化技术优化SQL命令的执行,且单个的SQL命令的功能相当于多条VFP命令。SELECT-SQL:查询UPDATE-SQL:修改记录DELETE-SQL:逻辑删除记录INSERT-SQL:追加记录ALTERTABLE-SQL:修改表结构CREATECURSOR-SQL:创建临时表CREATETABLE-SQL:创建表3.5SELECT-SQL命令SELECT[ALL|DISTINCT]
[TOP数值表达式[
PERCENT]]
[表别名.]检索项[AS
列名
][,[表别名.]检索项[AS列名
]...]
FROM[数据库名!]表名[WHERE
连接条件[AND
连接条件...]
[AND|OR
条件表达式[AND|OR
条件表达式...]]]
[GROUPBY列名[,列名...]]
[HAVING条件表达式
]
[UNION[ALL]SELECT
语句] [ORDERBY排序项[ASC|DESC][,
排序项[ASC|DESC]]...] [INTOTABLE|DBF
表名
|CURSOR临时文件名|ARRAY数组名]
[
TOFILE
文件名
]3.5SELECT-SQL命令说明
—相当于“杂项”选项卡SELECT[ALL|DISTINCT]|[TOP
数值表达式[PERCENT]]ALL:显示查询结果中的所有行,缺省值。DISTINCT:
禁止在结果集中出现完全相同的记录,每个
SELECT命令只能用一次DISTINCT选项。TOP
数值表达式[PERCENT]:指定显示结果中的若干行,或显示查询结果行数的百分比。由数值表达式
确定显示的行数,百分比由PERCENT参数确定包含TOP子句时必须有ORDERBY
子句。可以指定1到32767行,在指定的行数内,由ORDERBY子句指定的列如果有相同值,则相同值的那些行也在查询结果中。3.5SELECT-SQL命令说明
—相当于“字段”选项卡[表别名.]检索项[AS列名
][,[表别名.]检索项[AS列名
]…]指定查询结果的各列,各列的值由检索项确定,列名由“AS列名”确定。如果有同名的检索项,通过在各项前加表别名予以区分,检索项可以是FROM子句中表的字段名、常量、函数表达式。如选择所有字段,可用“*”代替。FROM[数据库名!]表名[逻辑别名]:指出包含查询数据的表名的列表。如果查询数据来自多张表,则表名用逗号分开,当不同数据库中的表同名时,在表名前加数据库名,数据库名与表名之间用“!”分隔。3.5SELECT-SQL命令说明
—相当于“筛选”选项卡[WHERE
连接条件[AND
连接条件...]
[AND|OR条件表达式
[AND|OR
条件表达式…]]]该子句指明查询条件,如果缺省则将查询FROM子句指定表中所有记录。如果由FROM子句指定多表查询,则要用WHERE子句指定多表之间的连接条件。OperatorComparisonOperatorComparison=Equal>Morethan==Exactlyequal>=MorethanorequaltoLIKESQLLIKE<Lessthan<>!=
#Notequal<=Lessthanorequalto3.5SELECT-SQL命令说明
—相当
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025下半年贵州省安顺市关岭县乡镇事业单位历年高频重点提升(共500题)附带答案详解
- 2025下半年湖南怀化市卫生健康委员会所属事业单位招聘9人高频重点提升(共500题)附带答案详解
- 2025下半年浙江温州永嘉县事业单位招聘(选调)49人高频重点提升(共500题)附带答案详解
- 2025下半年广东江门开平市事业单位招聘职员128人历年高频重点提升(共500题)附带答案详解
- 2025下半年四川省绵阳涪城区事业单位招聘6人历年高频重点提升(共500题)附带答案详解
- 2025上海申通地铁建设集团限公司建设管理专业技术人员招聘高频重点提升(共500题)附带答案详解
- 2025上半年福建泉州市直政府系统事业单位招考拟聘用人员5高频重点提升(共500题)附带答案详解
- 2025上半年江苏省苏州吴中高新区招聘17人历年高频重点提升(共500题)附带答案详解
- 2025上半年山东特检集团招聘35人高频重点提升(共500题)附带答案详解
- 2024年白酒购销合作标准合同模板版
- 原料药FDA现场GMP符合性要求与检查实践课件
- 茶艺表演费课件
- 创建电力优质工程策划及控制课件
- DBJ61-T 104-2015 陕西省村镇建筑抗震设防技术规程-(高清版)
- 实战销售培训讲座(共98页).ppt
- 测控电路第7章信号细分与辨向电路
- 外研版(三起)小学英语四年级上册教案(全册)
- 小学生体育学习评价表
- 哈尔滨工业大学信纸模版
- 餐饮店应聘人员面试测评表
- 踝关节扭伤.ppt
评论
0/150
提交评论