数据库课程辅导一.docx
- 文档编号:7322544
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:38
- 大小:59.74KB
数据库课程辅导一.docx
《数据库课程辅导一.docx》由会员分享,可在线阅读,更多相关《数据库课程辅导一.docx(38页珍藏版)》请在冰豆网上搜索。
数据库课程辅导一
数据库课程辅导一
---建立数据库
FoxPro2.5bforWindows是目前微机上一种常用的关系型数据库管理系统,它在Windows操作环境下运行,能够充分发挥Windows操作系统的功能,是各行各业进行数据处理和信息管理的主要工具之一。
一、数据库文件
数据库文件是在FoxPro操作环境下建立和使用的基本文件。
数据库文件又简称数据库、库文件或库。
当用户需要利用关系数据库管理系统管理一个部门的数据时,首先要建立关系数据模型,进而按照关系规范化的要求建立起每一个关系,即每一个数据库文件。
一个数据库文件对应一个二维表。
如表1-1就是一个二维表。
表中的顶行给出了表的结构,又称为记录结构,以后每一行为一条记录,每条记录对应一个记录号,它是该记录在表中的位置序号,即第一条记录的记录号为1,第二条记录的记录号为2,依此类推。
当利用一张二维表在FoxPro系统中建立一个数据库文件时,一个记录的记录号就是该记录被录入时的次序号,亦即它在库文件中的存储位置序号(又称物理顺序号),当利用list或display命令显示库文件中的记录时,将在每条记录的前面显示出记录号。
表中的每一列为一个字段(又称属性),每个字段的名称在表的顶行列出,依次为职工号、姓名、性别、出生日期、职称和基本工资,对应的字段号依次为1,2,…,6。
表中的每条记录都具有相同的结构,即都是由上述六个字段所组成。
对于不同的记录,关键字段或组合关键字段上的值必然不同,而其它字段上的值可以相同,也可以不同。
在表1-1中,若采用职工号作为关键字段,则每个记录的职工号数据必须互不相同,即每个记录的职工号必须具有唯一性。
表1-1职工简表
职工号
姓名
性别
出生日期
职称
基本工资
01001
赵志华
男
51/04/25
副教授
660.00
01002
徐静
女
67/12/03
讲师
520.00
01003
黄永路
男
62/08/11
讲师
540.00
02002
吴光平
男
75/05/08
助教
310.00
02004
江峰
男
46/09/20
教授
830.00
03001
李新
女
60/02/17
副教授
640.00
03005
王秀清
女
54/02/23
540.00
03006
张小龙
男
68/10/14
讲师
520.00
一个数据库文件由结构和内容两部分组成。
当在FoxPro系统中建立一个数据库文件时,首先是建立库的结构,然后再输入库的内容。
库结构对应二维表中的记录结构,库内容对应二维表中的全部记录。
定义库结构就是依次定义记录结构中的每个字段,定义每个字段就是给出每个字段的字段名、字段类型和字段宽度,当字段类型为数值型时,还要给出小数位数。
在FoxPro中,每个字段的字段名最多由10个ASCII字符(大小写等效)或5个汉字(每个汉字折合为2个ASCII字符)所组成,规定以字母或汉字开头,其余字符只能是字母、数字、汉字和下划线字符,不允许包含空格、标点等其它字符。
如NAME、wage、dianhua、姓名、职称、基本工资等都可以作为字段名。
在FoxPro中,字段类型共有七种,分别为字符型、数值型、浮点(数值)型、日期型、逻辑型、备注型和通用型,分别对应的类型标识符为Character,Numeric,Float,Date,Logical,Memo和General,可分别简记为C,N,F,D,L,M和G。
定义一个字段的宽度就是定义用于存储每个记录中该字段的值所需要的字节数。
对于日期型字段,系统规定其固定长度为8,其中分别用两个字节存储日期中年份、月份和月内天数的值,用两个字节存储年、月、日之间的两个分隔符。
一个日期数据中年、月、日的具体排列顺序由setdateto语句选定的日期格式决定,采用什么字符作为分隔符则由setmarkto命令决定,通常采用“/”、“-”、“.”等字符作为分隔符。
在表1-1中,日期型字段“出生日期”采用了YMD日期格式,即为yy/mm/dd样式,其中yy代表日期中年份的低两位数字,mm代表月份的两位数字,dd代表月内日期号的两位数字。
通常采用的另一种日期格式为AMERICAN(美州)格式,即为mm/dd/yy样式。
通常在西文FoxPro系统中默认为AMERICAN格式,在中文FoxPro系统中默认为YMD格式。
对于逻辑性字段,因为它只取“真”和“假”两种值,用一个字节完全能够表示出来,如用一个字节中的全“1”表示真,全“0”表示假,因此逻辑型字段的宽度被系统固定为1。
对于备注型和通用型字段,其值是专门存储在与库文件同名,而扩展名为FPT的备注文件中,在每个记录的备注型或通用型字段中,只需存储一个地址指针,用以指向该备注型或通用型字段的内容在备注文件中的存储位置。
所以备注型字段和通用型字段的宽度也是固定的,被系统定义为10。
对于字符型、数值型和浮点数值型字段,其宽度是由用户定义的,系统只规定其范围,字符型字段的宽度范围是1~254,数值型和浮点数值型字段的宽度范围均为1~20。
数值型和浮点数值型都可以用来定义取值为数值的字段类型,只是浮点数值型能够表示的数值范围更广。
定义字符型、数值型和浮点数值型字段的宽度应大于等于其全部取值中的最大字符数,对于数值型和浮点数值型字段,其正、负号及小数点字符也应计算在内。
例如,对于表1-1,考虑到使用双姓的名字最多为4个汉字,所以姓名字段的宽度应定义为8,考虑到基本工资有可能达到千元以上,即整数位需四位,所以基本工资字段的宽度应定义为7,其中包括一位小数点和两位小数。
综上所述,根据表1-1定义的库结构如表1-2所示。
表1-2职工简表结构
字段名
字段类型
字段宽度
小数位数
职工号
字符
5
姓名
字符
8
性别
字符
2
出生日期
日期
8
职称
字符
10
基本工资
数值
7
2
二、关系运算
一个数据库文件称为一个关系,关系之间除了可以进行传统的集合运算外,还可以进行选择、投影和联接这三种专门的关系运算。
关系运算的结果仍然为一个关系。
1、 选择运算
选择运算是从一个关系中顺序挑选出满足给定条件的所有记录,由它们构成一个新关系,该关系同原关系具有完全相同的结构。
如从表1-1的关系中,选择出性别为“男”的所有记录,则产生出如表1-3所示的新关系。
表1-3性别为“男”的关系
职工号
姓名
性别
出生日期
职称
基本工资
01001
赵志华
男
51/04/25
副教授
660.00
01003
黄永路
男
62/08/11
讲师
540.00
02002
吴光平
男
75/05/08
助教
310.00
02004
江峰
男
46/09/20
教授
830.00
03006
张小龙
男
68/10/14
讲师
520.00
2、投影运算
投影运算是从一个关系中按所需顺序选取若干个字段,由这些字段构成新关系的结构,由这些字段的所有值构成新关系的内容。
如从表1-1的关系中,选取职工号、姓名、职称和出生日期这四个字段,则得到原关系的一种投影,如表1-4所示。
表1-4投影得到的关系
职工号
姓名
职称
出生日期
01001
赵志华
副教授
51/04/25
01002
徐静
讲师
67/12/03
01003
黄永路
讲师
62/08/11
02002
吴光平
助教
75/05/08
02004
江峰
教授
46/09/20
03001
李新
副教授
60/02/17
03005
王秀清
54/02/23
03006
张小龙
讲师
68/10/14
联接运算
联接运算是将两个或两个以上的关系根据联接条件联接成一个新关系。
新关系中包含有被联接关系中的全部字段。
一般的联接是等值联接,即使被联接的多个关系中对应记录号或字段值相等所进行的联接。
若在等值联接的结果中去掉重复字段,即只保留多个相同属性中的一个,则称之为自然联接。
在联接运算的过程中,若不需要在结果关系中得到被联接关系中的全部字段,则可以从全部字段中投影出一部分字段作为结果关系中的字段。
例如,将表1-1的关系同表1-5的关系按职工号相等的条件进行等值联接,并且从前一关系中投影出职工号、姓名、性别和职称字段,从后一关系中投影出通信地址和电话字段,则得到的新关系如表1-6所示。
表1-5职工通信录
职工号
姓名
通信地址
电话
邮编
01001
赵志华
西城新文化街426号
76034269
100031
01002
徐静
西城新文化街135号
76032054-7458
100031
01003
黄永路
东城礼士胡同25-8号
74478625
100025
02002
吴光平
朝阳光明北里4-138号
77243279
100018
02004
江峰
宣武赵家村南路328号
72807521-104
100009
03001
李新
东城礼士胡同25-12号
74472005-426
100025
03005
王秀清
西城永安新区甲五楼241号
75053988
100032
03006
张小龙
石景山八角北路18楼237号
100043
表1-6联接得到的关系
职工号
姓名
性别
职称
通信地址
电话
01001
赵志华
男
副教授
西城新文化街426号
76034269
01002
徐静
女
讲师
西城新文化街135号
76032054-7458
01003
黄永路
男
讲师
东城礼士胡同25-8号
74478625
02002
吴光平
男
助教
朝阳光明北里4-138号
77243279
02004
江峰
男
教授
宣武赵家村南路328号
72807521-104
03001
李新
女
副教授
东城礼士胡同25-12号
74472005-426
03005
王秀清
女
西城永安新区甲五楼241号
75053988
03006
张小龙
男
讲师
石景山八角北路18楼237号
在关系运算中,选择、投影和联接既可以单独运算,也可以混合运算。
在混合运算中,无论运算次序如何,都将得到同样的结果。
在FoxPro系统中,将自动对混合关系运算进行优化处理,使得运算量最小,运算速度最快。
一般情况下,先做选择运算,再做投影运算,最后做联接运算可使运算量最少。
如对于表1-1的关系,若既需要按出生日期字段的值大于等于{60/01/01}的条件进行选择运算,又需要按职工号、姓名、基本工资和出生日期字段的顺序进行投影运算,则无论是先选择后投影,还是先投影后选择,都得到如表1-7所示的新关系。
表1-7混合运算得到的关系
职工号
姓名
基本工资
出生日期
01002
徐静
520.00
67/12/03
01003
黄永路
540.00
62/08/11
02002
吴光平
310.00
75/05/08
03001
李新
640.00
60/02/17
03006
张小龙
520.00
68/10/14
三、 FoxPro中的数据
同其它计算机程序设计语言一样,FoxPro中的数据也包括常量、变量、函数和表达式四种表示。
1. 常量
常量具有数值、字符、逻辑和日期四种类型。
数值型常量简称常数。
它具有两种表示法:
定点表示法和浮点表示法。
定点表示法是指用10个数字0~9、+(正号)、-(负号)和.(小数点)表示常数的方法。
如326,-7.65,+100,0.025,-12等都是定点表示的常数。
浮点表示法是指在定点表示法的基础上增加以10为底的指数部分来表示常数的方法,其中底数10用字母E(大、小写等效)来表示。
如1.25E9,-62.43E-5,2E4,3.0E-18等都是浮点表示的常数,它们分别与数学上的1.25×109,-62.43×10-5,2×104,3.0×10-18相对应。
字符型常量简称字符串。
它是用一对双引号或单引号或中括号括起来的一串字符(包括ASCII字符和汉字),其中字符串两边的双引号、单引号或中括号为字符串的起止定界符,不是字符串本身的字符。
一个字符串的长度等于该串中所含的ASCII字符的个数,其中一个汉字等于两个ASCII字符。
如“ZGJK.DBF”,“x+y=”,‘62453728-2480’,[Thisisapen.],“最高工资”,“职工人数:
”等都是字符串,它们的长度分别为8,4,13,14,8和9。
逻辑型常量只有两个,即“真”和“假”,其中“真”用.T.或.Y.表示,“假”用.F.或.N.表示。
逻辑值中的字母T,Y,F和N大小写等效,字母两边的句点为一个逻辑值的起止定界符。
日期型常量是用一对花括号作为起止定界符的、具有特定日期格式的、长度为8或10的一串字符。
如用AMERICAN格式表示日期常量则为{mm/dd/yy}或{mm/dd/yyyy},用YMD格式表示日期常量则为{yy/mm/dd}或{yyyy/mm/dd},其中yy表示年份的低两位数字,取00~99之间的值;yyyy表示整个年份的四位数字,取0000~9999之间的值;mm表示月份,取01~12之间的值;dd表示月内的天数,取01~31之间的值。
通过使用setcenturyoff/on命令能够选择日期格式中的年份是采用两位表示还是四位表示,此命令缺省值为off,其年份采用两位表示。
如1964年3月27日,若表示成AMERICAN格式则为{03/27/64}或{03/27/1964};若表示成YMD格式则为{64/03/27}或{1964/03/27}。
在FoxPro常量中,除了数值型常量外,其余三种常量都带有起止定界符,当向数据库输入或修改每个记录中各字段的值时,不需要输入相应常量的起止定界符,只需要输入值本身即可。
2.变量
变量就是其值可以改变的量。
一个变量由一个变量名标识。
一个变量名由1~10个字符所组成,它必须以字母或汉字开头,后跟若干个字母、汉字或下划线字符,变量名中的字母大小写等效,系统不加区别。
如c1,BT2,xm,nianling,number,单位,出版社等都是合法的变量名。
变量分为字段变量和内存变量两种,一个变量名可以用来标识一个字段变量,也可以用来标识一个内存变量。
一个数据库文件中的每个字段又称为字段变量,字段名又称为字段变量名。
每个字段变量由建立或修改库结构时定义。
每个字段变量的值就是库内容中对应该字段的所有值,字段变量的当前值就是当前记录中对应该字段的值。
对于一个打开的数据库,任何时刻都有并且只有一个记录为当前记录。
如根据表1-1所建立的数据库中,共有六个字段或称字段变量,姓名就是其中的一个字段变量,姓名字段的值就是全部八个记录中的职工姓名,假定当前记录是第4号记录,则姓名字段的当前值就是“吴光平”,若当前记录改变为第6号记录,则姓名字段的当前值就变为“李新”。
内存变量分为系统定义的内存变量和用户定义的内存变量两种,若不特别指明,通常均指用户定义的内存变量。
内存变量是用来存储临时数据的,通过赋值、输入、统计等命令建立和使用的变量。
内存变量具有五种类型:
字符(C),数值(N),日期(D),逻辑(L)和屏幕型(S),常用前四种类型。
内存变量的类型不需要事先说明,由赋给它的值的类型自行决定。
如通过store命令把常数50赋给内存变量x时,则x为数值型,若再把字符串“abcd”赋给x时,则x又变为字符型。
若一个内存变量与当前库中一个字段变量同名时,系统在处理顺序上字段变量优先,即系统认为是字段变量。
为了区别同名的字段变量和内存变量,在使用内存变量时,应在其变量名前加上“M->”或“M.”修饰符,在使用字段变量时,可在其字段名前加上该库别名或工作区名以及“->”或“.”字符。
如M->xm或M.xm则表示内存变量xm,ZGJK->xm或ZGJK.xm则表示当前打开库ZGJK中的字段变量xm。
使用DIMEMSION或DECLARE命令可以说明一个或若干个数组以及每一个数组的维数和大小。
每一个数组都包含有一定数目的元素,每一个元素相当于一个内存变量。
如:
(1)DIMENSIONa(5)
(2)DECLAREb(3,4)
命令
(1)说明了一个一维数组a(),它包含有五个元素,依次为a
(1),a
(2),a(3),a(4)和a(5)。
命令
(2)说明了一个二维数组b(),它包含有三行四列共12个元素,依次为b(1,1),b(1,2),b(1,3),b(1,4),b(2,1),b(2,2),…,b(3,4)。
一个数组中的每一个元素可以单独作为一个内存变量使用,同一数组中的各元素允许具有相同或不同的的数据类型,允许使用赋值等语句对整个数组赋值或对任一个元素赋值。
若整个数组或一些元素没有被赋过值,则其值为逻辑假(.F.)。
另外,在说明一个数组或使用数组中的一个元素时,可以使用小括号,也可以使用中括号把数组后面的各维下标上界或各维下标括起来,在这里小括号和中括号的作用相同。
如a(5)和a[5]的表示相同,b(2,3)和b[2,3]的表示相同。
3.函数
FoxPro系统中使用的函数分为标准函数(见主教材附录C)和自定义函数两种,标准函数的函数名和函数功能由系统定义,用户可以直接代入参数调用,自定义函数的函数名和函数功能由用户在程序中通过FUNCTION语句定义,自定义函数的使用(或称调用)同标准函数的使用没有区别。
一个函数的运算结果是一个值,根据值的类型不同,也可把函数分为字符、数值、逻辑和日期四种。
每一个函数可以同常量和变量一样,既可以单独使用,也可以出现在表达式中。
函数的一般格式为:
<函数名>(<自变量1>,<自变量2>,…)
其中每个函数名同变量名一样,都是由1~10个字符所组成(字母大小写等效),它通常与反映其函数功能的英文单词或词组有关,以便于记忆。
如ABS为取一个数绝对值(absolutevalue)的函数名,YEAR为求日期数据中年份(year)的函数名,RECNO为取一个打开的数据库中当前记录号(recordNo)的函数名,MAX为求同一类型的若干个数据中最大值的函数名。
这些函数均为数值型函数,调用后均返回一个数值。
一个函数可能不带有自变量(或称参数),也可能带有一个或多个自变量,这完全由其函数格式和需要决定。
如RECNO()函数不带有自变量,它返回在当前工作区上打开数据库的当前记录的记录号,ABS(-7.62)函数带有一个自变量,返回值为7.62,MAX(48,26,75)函数带有三个自变量,函数值为75。
一个函数中的每一个自变量(又称实参)可以是符合规定类型的任一种数据形式,既可以是常量、变量、函数或表达式。
如对于YEAR(DATE())函数,此时的自变量为一个日期型函数DATE(),DATE()函数返回系统当前日期,YEAR(DATE())函数则返回该日期的年份,它为含有“世纪”的完整的四位数据。
假定系统当前日期为{05/26/98},此为mm/dd/yy表示,则YEAR(DATE())的值为1998。
又如,对于INT(2*x+3.4)函数,此时的自变量为一个数值表达式,假定该数值表达式中的x值为2.6,则该数值表达式的值就为8.6,函数的值为8,因为该函数叫做取整函数,它返回自变量值的整数部分。
再如,对于UPPER(“Apple”)函数,它为一个字符型函数,此时的自变量为一个字符串常量,该函数的值为字符串“APPLE”,因为该函数的功能是把自变量值中所有小写字母均转换为大写字母后返回。
4.表达式
表达式是指通过运算符和圆括号把常量、变量、函数等成分连接起来的式子。
表达式的运算结果为一个值。
根据表达式值的类型不同,可把表达式分为字符、数值、日期和逻辑四种。
(1)字符表达式
字符表达式是由字符型常量、变量和函数通过字符串连接运算符连接而成的式子。
字符表达式的值是一个串值,即一个字符串。
以后我们把单个字符型常量、变量或函数均看作为一个字符表达式,因为它们的值都是一个串值。
字符串连接运算符有两个:
+和-
连接运算符能够把它的左、右两个字符串首尾连接成一个字符串,连接后得到的字符串长度是被连接的两个字符串的长度之和。
两个连接运算符功能的唯一区别是:
若被连接的左边字符串的尾部有空格,则用减号运算符连接时则把所有这些空格移动到结果字符串的尾部,若用加号运算符连接则不作移动。
例如,设x=“ABCD”,y=“EGF”,z=“ABCD”,其中“”表示空格字符,则:
x+y=“ABCDEFG”x-y=“ABCDEFG”
y+x=“EFGABCD”y-x=“EFGABCD”
z+y=“ABCDEFG”z-y=“ABCDEFG”
(2)数值表达式
数值表达式是由算术运算符和圆括号把数值型常量、变量或函数连接而成的式子。
数值表达式的值是一个数值。
以后我们把单个数值型常量、变量或函数均看作为一个数值表达式,因为它们的值都是一个数值。
算术运算符有:
+(加),-(减或负号),*(乘),/(除),**或^(乘方),%(取模)
设有两个操作数a和b,a对b取模运算表示为a%b,其值是a除以b所得的余数,此余数的符号与除数b的符号相同,通常a和b均为整数。
如:
48%5=349%15=4
48%-17=-3-65%12=7
算术运算符的优先次序为:
即先计算括号内,后计算括号外;先计算内层括号,后计算外层括号;在同一层括号内,先进行函数运算,其次为取负运算,再接着为乘方运算,然后为乘、除和取模运算,最后为加和减运算;对于每个矩形框内同一级运算,则按照在表达式中从左到右出现的顺序依次进行。
如:
算术表达式值
3*ABS(-5.6)+218.8
-2^4/5-8-4.8
(16*3%5)^481
5%4^2*(7-INT(4.56))^3135
通常在书写一个算术表达式时,需要优先进行的运算请尽量使用圆括号括起来,以确保运算次序的正确性。
另外,在确省状态下,算术表达式的运算结果只保留两位小数,若需要增加或减少小数位数,则可事先通过使用setdecimalsto<小数位数>命令来实现。
(3)日期表达式
日期表达式是由日期运算符(+,-)连接日期型数据和整数而构成的式子。
日期运算符的含义如下:
+此加号连接的两个数据中,一个应为日期,另一个应为整数,相加结果为一个新的日期,它是在原有日期上后推一定天数后得到的日期。
-此减号连接的两个数据中,其前面一个只能为日期,后面一个可以为日期,也可以为整数,若后面是日期,则相减结果为两日期相差的天数,若后面是整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 课程 辅导