《数据库应用基础数据库的高级操作》由会员分享,可在线阅读,更多相关《数据库应用基础数据库的高级操作(21页珍藏版)》请在金锄头文库上搜索。
1、FoxPro For Windows http:/ 1第第6讲讲 数据库的高级操作数据库的高级操作数据库文件的排序数据库文件的排序数据库文件的索引数据库文件的索引数据库文件的检索数据库文件的检索数据的统计与运算数据的统计与运算FoxPro For Windows http:/ 2数据库记录的物理顺序(记录号)取决于数据输入的顺序。数据库记录的物理顺序(记录号)取决于数据输入的顺序。排序:数据库中记录按照某字段值大小重新排列,作为排序依据的字段排序:数据库中记录按照某字段值大小重新排列,作为排序依据的字段称为称为“关键字关键字”。排序后得到一个。排序后得到一个新新数据库,原数据库不变。数据库,原
2、数据库不变。数据库文件的排序数据库文件的排序SORT ON /A/D/C, TO 【说明说明】默认按字段升序默认按字段升序排序,排序,/A:升序升序 /D:降序降序 /C:不区分字母的大小写,默认区分。不区分字母的大小写,默认区分。排序依据可以是排序依据可以是多个字段多个字段,中间隔以逗号中间隔以逗号。可以加条件可以加条件For 或或while,对满足条件的记录排序对满足条件的记录排序可以加可以加 field ,决定生成新数据库的结构。决定生成新数据库的结构。【例】【例】 USE student SORT ON SNO TO stud1 USE stud1 LIST SORT TO stud2
3、 ON birthday ,score/D FOR sex=女女FoxPro For Windows http:/ 3排序后生成了许多内容相同,仅排列顺序不同的排序后生成了许多内容相同,仅排列顺序不同的新数据库文件新数据库文件,造,造成数据冗余,排序过程中所需磁盘空间为原文件的三倍。成数据冗余,排序过程中所需磁盘空间为原文件的三倍。索引是不改变纪录的物理顺序,按照索引表达式值使数据库中的纪索引是不改变纪录的物理顺序,按照索引表达式值使数据库中的纪录有序排列,它生成一个录有序排列,它生成一个索引文件索引文件,数据变化时,索引文件自动按,数据变化时,索引文件自动按索引表达式值进行调整。索引表达式值
4、进行调整。数据库文件的索引数据库文件的索引索索引引文文件件:由由按按照照一一定定的的逻逻辑辑顺顺序序排排列列的的关关键键字字段段(或或表表达达式式),和每个字段值所在的记录号组成。和每个字段值所在的记录号组成。以以SNO为关键字的索引文件为关键字的索引文件SNO.IDX: 查找时,先在索引文件中快速查到查找时,先在索引文件中快速查到要查的关键字,然后根据相对应的要查的关键字,然后根据相对应的记录号在数据库文件中快速定位到记录号在数据库文件中快速定位到相应的记录上。相应的记录上。SNO 记录号记录号990101 1990102 6990103 4990104 3990105 2990106 5F
5、oxPro For Windows http:/ 4.IDX .CDX 结构 .CDX 非结构 use student use student use studentinde on sno to sno inde on sno tag sno inde on sno tag sno of stuinde on name to name inde on name tag name inde on name tag name of stu索引文件索引文件 sno.IDX索引文件索引文件 student.cdx 索引文件索引文件 stu.cdx索引文件索引文件 name.IDXSnoSnonameS
6、nonamename【例】【例】单索引文件(单索引文件(.IDX):):只能包含一个索引。只能包含一个索引。复合索引文件(复合索引文件(.CDX):):结构复合索引文件(与数据库文件主名同名)结构复合索引文件(与数据库文件主名同名) 非结构复合索引文件非结构复合索引文件单索引文件:单索引文件: INDEX ON TO 复合索引文件:复合索引文件: INDEX ON TAG OF ASCENDING | DESCENDINGUNIQUEFoxPro For Windows http:/ 5 【例】索引表达式【例】索引表达式 USE student INDEX ON score TO score
7、&score.idx INDEX ON -score TO sco &按score 降序 多个字段索引表达式需转换成同一类型后相加。多个字段索引表达式需转换成同一类型后相加。单索引只有升序,数值表达式前加单索引只有升序,数值表达式前加-号实现降序,字符型不可号实现降序,字符型不可以。以。INDEX ON sex+STR(score) TO sex &sex.idxINDEX ON name+DTOC(brithday) TO bri INDEX ON 数学数学+语文语文 TO sy INDEX ON 性别性别 TO SY1 UNIQUE唯一索引唯一索引, 当几条纪录索引表达式值相同时当几条纪录
8、索引表达式值相同时,只取其中记录号最小的。只取其中记录号最小的。数值型取其和做关键字的值。数值型取其和做关键字的值。additive控制建立索引或打开索引时,以前的索引并不关闭。控制建立索引或打开索引时,以前的索引并不关闭。FoxPro For Windows http:/ 6字符转日期函数:字符转日期函数:CTOD()日期转字符函数:日期转字符函数:DTOC()数值转字符串函数:数值转字符串函数:STR(,,字符串转数值函数:字符串转数值函数:VAL()【例】【例】 ? Str(350) ? Str(120,3) ? Str(120.456,7,3) ? Str(34.45,2) ? Str
9、(34.55,2) ? Str(121.3,2) ? CTOD(“02/11/03”) ? DTOC(date() ? val(12) ? val(a12) ? val(12a) 相关函数相关函数FoxPro For Windows http:/ 72)打开索引:)打开索引: a. 建立索引文件时,同时打开了这个索引文件。建立索引文件时,同时打开了这个索引文件。 b.结构复合索引文件随数据库自动打开。结构复合索引文件随数据库自动打开。 c.在打开数据库的同时打开索引文件。在打开数据库的同时打开索引文件。 USE INDEX 【例】【例】 USE STUDENT INDE Score,sex d
10、.在打开数据库之后打开索引文件在打开数据库之后打开索引文件。 SET INDEX TO & 数据库文件必须先打开。数据库文件必须先打开。 【例】【例】 USE STUDENT SET INDEX TO Score,sex 3)关闭索引)关闭索引 SET INDEX TO 关闭当前工作区中的所有索引文件。关闭当前工作区中的所有索引文件。 CLOSE INDEX 关闭当前工作区中的所有索引文件。关闭当前工作区中的所有索引文件。 CLOSE DATABASES 关闭所有数据库及其索引文件。关闭所有数据库及其索引文件。 USE 关闭当前工作区的数据库及其索引文件。关闭当前工作区的数据库及其索引文件。F
11、oxPro For Windows http:/ 85)REINDEX 当数据库的纪录发生变化时,需重建索引当数据库的纪录发生变化时,需重建索引. INDEX和和REINDEX 忽略忽略set delete命令的设置。命令的设置。4)控制索引)控制索引:同时打开多个索引文件时,只有一个是主索引,默认第一个。同时打开多个索引文件时,只有一个是主索引,默认第一个。可用可用SET ORDER TO命令改变主索引。命令改变主索引。【例】【例】USE STUDENT INDEX Score,Sex SET ORDER TO 2&Sex.IDX SET ORDER TO 2 OF ST1 SET ORDE
12、R TO 0 &关闭主索引以物理顺序排列关闭主索引以物理顺序排列use student inde on score to score1append &80 List依据关键字值,新追加记录依据关键字值,新追加记录加入索引文件。加入索引文件。use studentappend &80set inde to score1listREINDEX list5660758092566075925660758092FoxPro For Windows http:/ 9 3. 索引后指针定位:索引后指针定位: GO TOP|BOTT 、SKIP逻辑定位逻辑定位 GO 1 物理定位物理定位小结:小结:1索引与
13、排序比较:索引与排序比较:2命令格式:命令格式: SORT TO ON /A/D/C 多个字段用多个字段用“,”间间隔。隔。 INDEX ON TO 多个字段转换成字符型用多个字段转换成字符型用“+”连接。连接。 56 360 475 280 592 1Score1.idxFoxPro For Windows http:/ 10物理检索:物理检索:LOCATE 范围范围 FOR 索引检索:索引检索:FIND / SEEK 数据库文件的检索数据库文件的检索检索成功检索成功: 指针指向首条符合条件的记录,指针指向首条符合条件的记录,FOUND()函数为函数为.T.,EOF()为为.F.,RECNO
14、()函数可返回该记录的记录号;函数可返回该记录的记录号;检索失败:检索失败:记录指针指向文件尾部,记录指针指向文件尾部,FOUND()函数为函数为.F.,而而EOF()为为.T.,且系统显示提示且系统显示提示NO FOUND。注意:注意:必须在打开索引文件后使用;必须在打开索引文件后使用;不能在非关键字之外的字段中进行查找;不能在非关键字之外的字段中进行查找;findfind、seekseek的缺点:只能按确定值查找,不能使用范围条件。的缺点:只能按确定值查找,不能使用范围条件。FoxPro For Windows http:/ 11【例】【例】USE STUDENTINDE ON NAME
15、to NAMEINDE ON SCORE to SCORESET ORDER TO NAMEFIND 赵 辉DISPLAYX=赵 辉FIND &XDISPLAYSET ORDER TO SCORESEEK 600DISPLAY【例】检索条件表达式【例】检索条件表达式Loca for sex=男男 .and. english80locate for 姓名姓名=“张军张军”Find 张军张军seek “张军张军” Seek 02/12/25 Seek .t. Find 528Seek 528x=赵辉赵辉y=261seek xseek yFind &x find &y seek 姓名姓名=“张军张军
16、”FoxPro For Windows http:/ 12释疑:释疑:LOCATE命令是按条件查询,命令是按条件查询,FIND和和SEEK命令必须先建立索引,不能脱离索引使用,按索引关键字的确定值查询按索引关键字的确定值查询。 注意区别:LOCATE FOR姓名姓名=“张军张军”,而FIND与SEEK不能用 FIND姓名=张军或SEEK姓名=张军,应使用命令FIND 张军张军 或SEEK 张军张军执行LOCATE命令后,继续查找下一个满足条件的记录应使用CONTINUE命令,不能再使用LOCATE命令。执行SEEK 、 FIND 命令后,继续查找下一个满足条件的记录应使用SKIP命令.SEEK
17、命令除了比FIND命令查找的数据类型多之外,还要注意SEEK命令后面可以是表达式表达式,而FIND命令后只能跟字符串字符串或数值数值。在对字符型常量查找时,SEEK必须加定界符定界符,FIND可加也可不加。使用FIND命令查询时,如果被查询的值存在变量中,必须使用宏代换。 例如: MNAME=“张宏”,FIND &MNAME 或或 SEEK MNAME.FoxPro For Windows http:/ 13宏替换函数宏替换函数:&.唯一一种没有括号的函数,参数为字符型变量,函数值为该变量所函数值为该变量所表示的字符串去掉定界符内的部分。表示的字符串去掉定界符内的部分。 . 是宏替换函数和后面
18、字符串常量的分隔符分隔符。相关函数相关函数【例例】 A=123 ? A+100&operator/operand type mismatch ? &A&123 ? &A+100&223 ? &A.45+100 &12445FoxPro For Windows http:/ 14子串搜索函数子串搜索函数:AT(,)RAT(,)AT()返回字符串1在字符串2中从左边的开始位置,若字符串2不包含字符串1,则返回值为0。RAT从右边开始。【例例】 ?at(for,FoxPro 2.6 for Windows) &12 ?Rat(人民,中华人民共和国的人民,2) &5一定要注意一个汉字占两个字符的位置。
19、一定要注意一个汉字占两个字符的位置。取子串函数取子串函数:SUBSTR(,)取左子串函数:取左子串函数:LEFT(,)取右子串函数:取右子串函数:RIGHT(,)【例例】 str=FoxPro 2.6 for Windows ? subs(str,12,3) &for ? left(str,10) &FoxPro 2.6FoxPro For Windows http:/ 15删除字符串首、尾空格函数删除字符串首、尾空格函数: ALLTRIM() TRIM() LTRIM() 空格函数空格函数:SPACE() 【例】【例】?abc+space(3)+ def &abc def【例】例】USE G
20、Z INDE ON 姓名+STR(奖金,3) TO GZW FIND 李力李力 80 ? FOUNT() & .f.INDE ON TRIM(姓名姓名)+LTRIM(STR(奖金奖金,3)姓姓名名+STR(奖奖金金,3) 记记录录号号李大为李大为 60 3李力李力 80 4李小蓝李小蓝 50 6 .FoxPro For Windows http:/ 161)模糊、精确的区别:给出查询内容的全部为精确, SEEK张松给出查询内容的部分为模糊, SEEK张2)模糊查询的实现:SET EXACT OFFLOCA FOR 姓名=张 FOR AT(“张”,姓名)0FOR SUBS(姓名,1,2)=张FO
21、R “张”$姓名FIND 张SEEK 张注意:一个汉字注意:一个汉字占两个字符!占两个字符!模糊查询模糊查询FoxPro For Windows http:/ 17 【例【例5.25】实现在已建立索引文件的数据库中按学号连续查询。】实现在已建立索引文件的数据库中按学号连续查询。SET TALK OFFUSE cjk INDE sno &已经建立索引文件已经建立索引文件snoDO WHILE .T. CLEAR ACCEPT 请输入学号请输入学号: TO kh SEEK kh IF FOUND( ) ? sno, 的成绩如下:的成绩如下: ? “语文:语文:”, yw ? “数学:数学:”, s
22、x ? “英语:英语:”, yy ELSE ? 对不起,库中没有这个人对不起,库中没有这个人 ENDIF WAIT 继续吗(继续吗(Y/N)?)? TO jx &修改循环条件修改循环条件 IF UPPER(jx)= N EXIT ENDIF ENDDO USE SET TALK ONFoxPro For Windows http:/ 18统计满足条件的记录个数统计满足条件的记录个数COUNT to【例】【例】USE studentCOUNT FOR sex=女 TO xDELETE FOR sex=男COUNT TO ySET DELETED ON COUNT TO yRECALL ALLSE
23、T FILTER TO sex=男COUNT TO x ? x数据统计与计算数据统计与计算统计结果与统计结果与set dele 的状态有关的状态有关统计结果显示在状态栏上统计结果显示在状态栏上FoxPro For Windows http:/ 19数值型字段纵向求和数值型字段纵向求和SUMTO【例】【例】 SUM SUM scoreSUM FOR sex=女 TO X,YSUM FOR sex=女 TO X 注意:此时提示语法错,如缺注意:此时提示语法错,如缺省字段表,则内存变量表要和库中数值型数据个数一致。省字段表,则内存变量表要和库中数值型数据个数一致。求和结果与求和结果与set dele
24、 的状态有关,为的状态有关,为ON ,则不参与求和则不参与求和.Set talk on 求和结果显示在背景窗上,为求和结果显示在背景窗上,为off则不显示。则不显示。如何求数值字段横向和?如何求数值字段横向和?Repl zf with yw+sx+yyFoxPro For Windows http:/ 20对数值型字段纵向求平均值对数值型字段纵向求平均值AVERAGETO和和sum用法一样,求数值型字段的平均值用法一样,求数值型字段的平均值。FoxPro For Windows http:/ 21分类汇总分类汇总TOTAL ON TO 必须先索引或排序。只对数值型字段分类汇总,而其它类型字段只取相同关键字第一条记录的字段值,所生成目标文件除不包括源文件的备注字段外,保留源文件的结构。 【例】【例】 USE zgINDE on 部门 to bmTOTAL on 部门 to hjkUSE hjkLIST按部门索引后的数据库:按部门索引后的数据库:部门 姓名工资计算中心丹阳1200计算中心王力1350教务处 阳平1300教务处 李立1400汇总后新数据库汇总后新数据库hjk:部门姓名工资计算中心丹阳2550教务处阳平2700