资源描述
第7章数据库应用基础VFP,7.1数据库的基本概念,日常生活工作中,我们每天都要接触大量的信息,比如学生成绩、人事档案、工资表、货物清单等。那么,它们都可以表示为数据的形式,这么多的数据,单靠纸、笔、算盘进行统计几乎是不可能的,计算机的出现解决了这个复杂的问题,它将大批量的数据信息存储在大容量磁盘上,并方便地进行管理。那么,这些数据是怎样存储的,怎样被访问、修改和删除呢?这就用到了数据库技术。数据库技术将各种各样的数据分门别类地存储起来,用户可以很容易地查看、管理、操作这些数据。,数据不仅仅是文本,多媒体数据库的发展可以让数据是图片、声音、视频等内容。7.1.1数据库系统的特点、数据模型7.1.1.1数据库系统的特点a.数据的共享性b.数据的独立性c.数据的完整性d.数据的集中性7.1.1.2数据模型,1、层次数据模型,系名系号系主任,专业号专业名,教师号姓名职称,学号姓名性别年龄,课程号课程名学分,系教务管理层次模型,2、网状数据模型,3、关系数据模型关系模型中每个关系对应一张二维表,它由一些行和列组成。关系模型中,实体和实体之间的联系都使用关系(二维表)来表示的。关系模型结构单一、操作方便,容易被用户接收,且有坚实的数学理论基础,因而得到了广泛的应用,成为目前最流行的一种数据模型。当前的一些数据库,从Oracle到SQLServer,以及Access和VFP,都毫无例外地采用了关系模型。,7.1.2了解数据类型1、字符型(C)由字母(汉字)、数字、空格等任意字符串组成。每个字符占1字节,汉字占2字节。长度0-254。2、货币型(Y)存储与货币有关的数据,如工资、价格等。3、日期型(D)保存不带时间的日期,存储格式为“yyyymmdd”。字段宽度8字节。4、日期时间型(T)包括年、月、日、时、分、秒。,5、逻辑型(L)用于存储只有两个值的数据,存入的值只有(.T.)和(.F.)两种状态,占一个字节。如婚否,及格否等。6、数值型(N)用来存储由数字、小数点和正负号组成的,可以进行计算的数据,如成绩、重量、体积、订货数量等。7、双精度型(B)存储高精度的试验数据。8、浮点型(F)9、整型(I)存放由数字和正负号构成的整数型数据。其字段宽度为4字节。使用整型比使用其它类型节省空间,运算速度也快。,10、备注型(M)占用10个字节的空间,单独存在于一个备注文件中,备注文件扩展名为.DBT。7.1.3掌握VFP中常量与变量的概念1、常量值不变的数据项。数值型常量:5、2.345、-100。字符型常量:“XUV”、“欢迎!”、Hello。逻辑型常量:.T.和.F.。日期型常量和日期时间型常量:2008-11-11、2009-1-1211:11am。,2、变量可以变化,有名字的数据。命名规则:变量名只能由字母、数字、下划线组成。以字母或下划线开头,长度为1128个字符。不能使用VFP的保留字。每个汉字占2字符。“A_XX”、“_UU”、“运算结果”。“7abc”、“IF”、“ELSE”、“A2”、“2”、“8开始”。,7.1.4掌握VFP表达式的使用1、算术运算符2、字符串运算符3、日期时间运算符4、关系运算符5、逻辑运算符,求值:2+31+4.AND.NOT.68,算数运算符的优先级为()或*和/%+和-。,1、算术运算符,表达式的书写规则:每个符号占格,所有符号都必须排在同一横线上,不能出现上标或下标。例如:102写为102或10*2、3xy写为3*x*y、2x+5(y+z)写为2*(x+5*(y+z)、r2写为pi()*r2。练习:将下式写为VFP算术表达式。2、字符串运算符,字符串表达式:“ab123”+”88xy”结果为:“ab12388xy”。“欢迎光临”“谢谢惠顾!”结果为:“欢迎光临谢谢惠顾!”。“abc“+”123“+”xyz“结果为:”abc123xyz“。“ABC“+”DEF”结果为:”ABCDEF”。3、日期时间运算符日期之间只能进行加减运算,有下面3种情况:(1)日期相减,得到相差的天数。(2)日期加数值,得到新的日期。(3)日期减数值,得到以前某个日期。,例如:2008/11/112008/11/1结果为数值10。2008/11/11+5结果为日期型数据:2008/11/16。2008/11/11-3结果为日期型数据:2008/11/8。4、关系运算符,说明:关系运算符两边的表达式只能是数值型、字符串型、日期型,不能是逻辑型的表达式或值。字符型数据按其ASCII码值进行比较,ASCII码大的字符所在的串值大。(ASCII码用0-127的数字表示字母和一些符号,其中空格(的ASCII码)0129ABZabc=0。,闰年的条件是:年号(year)能被4整除,但不能被100整除;或者能被400整除。结果为:(y%4=0.AND.Y%1000).OR.(y%400=0)7.1.5VFP常用函数1、数学函数MAX(表达式1,表达式2,)求各表达式中的最大值。MIN()求各表达式中最小值。MOD(表达式1,表达式2)求表达式1除以表达式2的余数。?BETWEEN(15,10,30)&结果显示.T.score=80?IIF(score=90,”优”,”合格”)&显示:合格。2、字符串函数LEN(表达式)求字符串表达式长度。SUBSTR(表达式,n,m)从字符串表达式中提取从n开始的m个字符的字符串,若省略m,则取n开始的所有字符串。,SUBSTR(“11/30/03”,7,2)=“03LOWER(表达式)将字符串表达式中的大写字母转化为小写字母,其余不变。UPPER(表达式)与上相反。3、日期时间函数DATE()取系统当前日期。TIME()取系统当前时间。DATETIME()YEAR(日期表达式)取日期表达式的年份值,返回整数。MONTH(日期表达式)取日期表达式的月份值,返回整数。DAY(日期表达式)取日期表达式的月份值,返回整数。LISTYEAR(出生日期),4、类型转化函数STR(数值表达式)转换数值表达式为数字字符串。CTOD(表达式)将字符串转化为日期型。DTOC(表达式)将日期型表达式转化为字符串。86年出生的表达式:SUBSTR(DTOC(出生时间),7,2)=86等价于:YEAR(出生时间)=1986出生时间必须为日期型。,1、求3的10次方。2、求199除以5得的余数。3、1995+年+8+月+日结果为什么?4、闻鸡起舞+枕戈待旦5、闻鸡起舞枕戈待旦6、2008/11/11-3结果为?7、3#9结果为?(或、!=)8、菊$采菊东篱下结果为?9、陶潜=陶精确匹配,结果为?10、(18).AND.(28).OR.(2=480&显示入学成绩大于480的所有记录。Go2RECALLALL&取消当前表中所有记录的删除标记。FIELDS子句:后面可以跟字段名和表达式。LISTFIELDS姓名,性别,出生时间,入学成绩&后跟字段名LISTFIELDS“姓名”+姓名,”性别”,性别,FOR子句:LISTFOR性别.AND.入学成绩=480LISTFIELDS姓名,入学成绩FOR性别.AND.入学成绩=480LISTFIELDS“姓名”+姓名,”性别”,性别FOR.NOT.性别LISTALLFIELDS学号,入学成绩FOR入学成绩=460.AND.性别DISPLAYFOR出生时间的作用是:在规定的中,按检查全部记录。即从第1条记录开始,满足条件的就执行该命令,不满足条件就跳过去继续搜索,直到最后一条记录。若省略,则默认为ALL。,命令书写规则:1)每条命令必须以一个命令动词开头。2).T.F.两个逻辑值中的小数点与字母间不能有空格。3)一个命令行的最大长度是254个字符,空格数也包括在内。4)如果一个命令太长,一行写不下,可以使用续行符“;”。5)不区分大小写。6)命令动词和子句中的短语可以用其前4个字符缩写表示。如DISPLAYSTRUCTURE可简写为DISPSTRU。7)不要用A到I之间的单个字母作为表名,因为它们已被保留作数据库工作区的名称。8)不要用VFP的保留字作文件名、字段名、变量名等。9)一行只能写一条命令,每条命令的结束标志是回车键。10)数据库文件后缀为.DBC、表文件名后缀为.DBF、备注文件.FPT。,7.2VFP数据表7.2.1数据表的基本概念数据表:一些有组织数据的集合,由行、列组成的二维表格。简称表(Table)。一个数据库包含一个或多个二维表,表表示现实世界的关系或实体,各个数据表之间可能存在某种关系。字段:数据表中的每一列称为一个字段,它对应表格中的数据项,每个数据项的名称称为字段名(属性),如“年龄”、“性别”、“学号”、“入学时间”等都是字段名。记录:表中每一数据行成为一条记录,每条记录由许多字段组成,如“2006001、赵小霞、女、1987年6月12日、490、计算机、程家吉”。,St.dbf数据表,7.2.2启动VFP7.2.3建立数据表可以在VFP中建立两种表:数据表和自由表。数据表是数据库的一部分,自由表可以独立存在于任何数据库之外。数据库文件后缀为.DBC、表文件名后缀为.DBF、备注文件.FPT。1)利用“表设计器”创建新表。2)追加记录。3)使用命令创建新表CREATETABLE(),(),字符型(C)由字母(汉字)、数字、空格等任意字符串组成。每个字符占1字节,汉字占2字节。长度0-254。货币型(Y)存储与货币有关的数据,如工资、价格等。日期型(D)保存不带时间的日期,存储格式为“yyyymmdd”。字段宽度8字节。日期时间型(T)包括年、月、日、时、分、秒。逻辑型(L)用于存储只有两个值的数据,存入的值只有(.T.)和(.F.)两种状态,占1个字节。如婚否,及格否等。,数值型(N)用来存储由数字、小数点和正负号组成的,可以进行计算的数据,如成绩、重量、体积、订货数量等。整型(I)存放由数字和正负号构成的整数型数据。其字段宽度为4字节。使用整型比使用其它类型节省空间,运算速度也快。备注型(M)占用10个字节的空间,单独存在于一个备注文件中,备注文件扩展名为.DBT。1、创建新表命令CREATETABLESt_1(学号c(7),姓名C(6),性别L(1),出生时间d(8),入学成绩n(6,1),所在系c(10),系负责人c(8),2、打开表命令USESt3、关闭表命令USE4、添加记录命令APPEND7.2.4浏览数据表USESt(如果当前表不在默认路径下,一定要加路径)BROWSEUSE“d:vfpst.dbf”显示数据还可以使用LIST和DISPLAY命令。命令格式如下:LIST或DISPLAYFIELDSFOROFF(DISPLAY若没有FOR语句,则只显示当前行。若不指定FIELDS,则输出所有字段。加上OFF,则显示系统加上的记录号,反之,不显示。),显示所有数据:LIST或DISPLAYALL。显示当前记录:DISPLAY不带记录号现实当前记录:DISPOFF显示男同学的姓名和出生时间:DISPLAY姓名,出生时间FOR性别或LIST姓名,出生时间FOR性别,显示入学成绩在480分以上的女生的学号、姓名、性别、入学成绩。LISTOFF“学号:”+学号,姓名,性别,入学成绩FOR.not.性别.and.入学成绩=480显示女同学的姓名和年龄:DISP姓名,year(date()-year(出生时间)FOR性别编辑模式:EDIT与CHANGE命令等价。例如:修改当前记录EDIT修改第n条记录EDITn修改包括当前记录在内的n条记录:EDITNEXTn,列出8月份出生的女同学的姓名和出生时间?列出年龄大于等于20岁的学生纪录,要求不显示记录号?,记录指针的移动:绝对定位:GOTOP、GOBOTTOM、GO。相对定位:SKIP。n0下移、n19)。INDEXON学号toxhforyear(date()-year(出生时间)=22LIST4、查询记录使用普通索引、候选索引或主索引,可以进行记录排序,以便提高显示、查询或打印的速度。字符查找例:在已经建立的索引文件的基础上,查找姓名为“李才”和学号为“2006011”的记录。,SETORDERTOxmFIND李才DISPSETORDERTOxhFIND2006011DISPFIND2006001DISP注意:使用SETORDER命令,可以改变表单中记录的顺序。格式为:SETORDERTO(索引名为已存在的索引)。FIND字符查找命令,查找关键字与所给字符串相匹配的第一个记录。若找到,指针指向该记录,否则指向文件尾。FIND|,表达式查找:例:以性别为关键字建立索引,并查找第一个男生记录和第一个女生记录.INDEXON性别TOxbSETORDERTOxbLISTSEEK.T.DISPSEEK.F.DISPSEEK命令查找关键字与所给字符串相匹配的第一个记录。若找到,指针指向该记录,否则指向文件尾,给出信息“没找到”。语法格式为:SEEK删除所有索引:DELETETAGALL。删除索引:DELETETAG索引名。,说明:只能找出符合条件的第一条记录,该命令可以查找字符、数值、日期和逻辑型索引关键字。若为字符串,则必须用界限符号括起来(,“”,)。若是找到了符合条件的首记录,则函数FOUND()的值为.T.,否则为.F.。顺序查询例:在数据表中依次查找86年出生的学生记录。USESTLISTLOCATEFORSUBSTR(DTOC(出生时间),7,2)=“86”DISPCONTINUEDISPCONTINUEDISP,将记录指针定位在第一条中文系学生纪录上?将记录指针定位在第一条成绩大于500分的学生纪录上?,LOCATE命令是在不建立索引的条件下,查找当前数据表中满足条件的第一条记录。语法格式为:LOCATEFOR统计记录建立数据表后,常常要对数据表中数值型字段的记录进行统计。统计记录数COUNT:例:分别统计女生人数和入学成绩480分的学生记录。USEstLISTCOUNTFOR.NOT.性别TOnCOUNTFOR入学成绩=480TOx?n,x,统计函数使用COUNT命令,格式为:COUNTFORTO求和SUM:例:求女生入学成绩之和。SUM入学成绩FOR.NOT.性别TOnu求平均值AVERAGE:例:求86年出生的学生的平均入学成绩,以及中文系男学生的平均入学成绩。AVERAGE入学成绩FORSUBSTR(DTOC(出生时间),7,2)=“86”TOpjcj,AVERAGE入学成绩FORSUBSTR(DTOC(出生时间),7,2)=“86”另外一种写法:AVERAGE入学成绩FORYEAR(出生时间)=1986LISTYEAR(出生时间)&返回4位数整数。LISTFORYEAR(出生时间)=1987,AVERAGEFOR所在系“中文”TOpjszx?“86年出生的学生的平均入学成绩为:”+str(pjcj)?“中文系学生的平均入学成绩为:”+str(pjszx)AVERAGE命令格式为:AVERAGEFORTO,补充内容:索引的降序处理:如果是数字,可直接在前面加“-”号。如果是字符串,则格式如下:INDEXON出生时间TAGsjDESC求最大值最小值函数(MAX和MIN函数的使用)。CALCULATESUM(入学成绩),MAX(入学成绩),MIN(入学成绩),AVG(入学成绩)CALCULATEMAX(入学成绩)TOmaxcj,复制数据到新文件命令如下:COPYTOFIELDSFORCOPYTO学生2.dbfFIELDS姓名,补助,出生日期FOR专业=计算机,对计算机专业的学生按年龄的降序排列,生产新表table1.dbf,且只包含姓名、性别、出生时间3字段?将1986年出生的同学按分数升序排列,并生成新表table2?,常用的操作命令总结:子句4种情况:ALL操作对象为表中全部数据。NEXT操作包括当前记录在内的以下n条记录。RECORD只操作第n个数据。REST操作从当前到结尾的记录。显示表中记录LIST、DISPLAYLISTFIELDSFOROFFLISTALLFIELDS学号,语文FOR语文=85.AND.性别DISPLAYFOR出生日期=480TOx?n,xSUM入学成绩FOR.NOT.性别TOnuSUM入学成绩FOR所在系=计算机TOnumberAVERAGE入学成绩FORSUBSTR(DTOC(出生时间),7,2)=86TOpjcj(或YEAR(出生时间)1986)AVERAGE入学成绩FOR所在系中文TOpjszx,用命令建立索引INDEXONFORINDEXON学号TOxhLISTINDEXON-入学成绩TOcjLISTINDEXON姓名TAGxmDESC按姓名的降序建立索引(默认为升序)。LIST,复制数据到新文件命令如下:COPYTOFIELDSFORCOPYTO学生2.dbfFIELDS姓名,补助,出生日期FOR专业=计算机,
展开阅读全文