390 likes | 541 Views
表的创建和基本操作. 西南财经大学 经济信息工程学院. 表的创建. 表:保存在磁盘中的一张二维表( . DBF/.FPT) 与数据库相关联的表叫数据库表 ; 与数据库无关联的表叫自由表。 字段( Field): 表中的一列,规定了数据的特征。 记录( Record): 表的一行,多个字段的集合。 表结构( Structure): 存储表记录的一个公共结构。. 要建立一张完整的表,必须先建立表的结构, 然后再输入记录(数据). 字段的基本属性. 字段名 : 用以标识一个字段的名字。
E N D
表的创建和基本操作 西南财经大学 经济信息工程学院
表的创建 表:保存在磁盘中的一张二维表( .DBF/.FPT) • 与数据库相关联的表叫数据库表 ; • 与数据库无关联的表叫自由表。 字段(Field):表中的一列,规定了数据的特征。 记录(Record):表的一行,多个字段的集合。 表结构(Structure):存储表记录的一个公共结构。 要建立一张完整的表,必须先建立表的结构, 然后再输入记录(数据)
字段的基本属性 • 字段名:用以标识一个字段的名字。 • 字段的数据类型:说明字段是什么类型的数据;不同的数据类型的表示和运算的方法不一样;其中备注型和通用型的具体数据都保存在.FPT文件中 • 字段宽度: • 指该字段所能容纳数据的最大字节数。 • 小数位数: • 数值型、浮点型、双精度型的字段可指定小数据位。 • 字段宽度=整数部分宽度+小数点1位+小数位宽度 • 小数位至少比整个字段宽度小2。 • NULL值: • 不是一种数据类型,用来指示数据存在或不存在的一种属性。
表结构的创建 • 表结构的设计 • 建立表的结构 • 设置工作目录 • 界面操作(p58) • 命令方式 set default to [<路径名>] • 使用“表向导”设计表的结构 • 使用“表设计器”设计表的结构
CREATE TABLE-SQL • 格式 • CREATE TABLE|DBF 表文件名(字段名1 字段类型[(字段宽度[,小数位数])][,字段名2 字段类型[(字段宽度[,小数位数])]]……) CREATE TABLE xs2 (xh c(6) NOT NULL ,xm c(8),xb c(2)) 命令字 表文件名 字段名 类型宽度 使用NULL值 对于一些宽度固定的字段类型,宽度不用标出。
修改表结构 • 表设计器方式 • 在“项目管理器”中使用“修改”按钮 • MODIFY STRUCTURE命令 • ALTER TABLE-SQL命令方式 • ADD COLUMN:添加字段。 ALTER TABLE xs ADD COLUMN bjmc c(12) • RENAME COLUMN:重命名字段。 ALTER TABLE xs RENAME COLUMN bjmc TO bj • DROP COLUMN:删除字段。 ALTER TABLE xs DROP COLUMN bj • ALTER COLUMN:修改宽度
记录的处理 • 记录的追加 • 表创建好后立即输入记录 • 输入数据的注意事项(p65) • 通用型和备注型字段的输入 • 浏览状态下追加记录 • 用INSERT-SQL命令追加记录 • 用APPEND命令追加记录 • APPEND • APPEND FROM 表文件名:从其他表中追加记录。 • APPEND FROM TXT 文本文件名SDF:从文本文件添加。 • 从其他类型的文件追加记录
INSERT-SQL命令 • 格式 • INSERT INTO 表名 [(字段1[,字段2…])];VALUES (表达式1[,表达式2…]) • 例 • INSERT INTO xs (XH,XM,XB,XIMING); • VALUE (“96010057”,”曹晓燕“,”女”,”文”) 追加进表的记录总在最后一条。
表的打开和关闭 • 打开表(分为“独占”和“共享”两种方式) • 使用“文件”菜单 • 使用use命令 USE [<文件名>|<?>][EXCLUSIVE|SHARED] • 关闭表 • 退出VFP • USE
记录的浏览 • 浏览窗口 • BROWSE命令 • 格式 BROWSE [FIELDS 字段名1,字段名2…] FOR/WHILE [条件] • 例 BROWSE FIELDS xh,xm,xb FOR xb=‘男’ 浏览XS表中所有男同学的XH,XM,XB信息。
记录的定位 • 记录的指针 • 系统在打开一个表文件后将自动生成三个控制标志:记录开始标志、记录指针标志、记录结束标志。 文件头 (含表结构等信息) 第1号记录 第2号记录 第n号记录 记录开始标志 记录指针 记录结束标志
记录指针 • 记录指针是VFP系统内部的一个指示器,在表中指向记录。每当打开一个表文件时,指针总是指向第一条记录。 • 记录指针指向的记录叫当前记录,改变指针的指向叫记录的定位。 • 测试当前记录用函数RECNO()。最小值为1,最大值为RECCOUNT()+1。 • 打开表时记录指针情况: • 表中无记录:BOF()=.T. EOF()=.T. RECNO()=1 • 表中有记录:BOF()=.F. EOF()=.F. RECNO()=1
记录的定位方式 在浏览状态下“表/转到记录” • 记录指针的绝对移动 • GO/GOTO n:当n大于记录总数时将拒绝移动。 • GO TOP GO BOTTOM • 记录指针的相对移动 • SKIP [n]:n>0向文件尾方向;n<0向文件头方向。 • 记录的条件定位 • LOCATE [范围] FOR/WHILE [条件](忽略) • 记录的索引定位:SEEK
一些子项的含义 • 范围 • ALL:全部记录 • NEXT n:从当前记录开始的N个记录 • RECORD n:第N个记录 • REST:从当前开始到结束的所记录 • 条件 • FOR:在指定范围内对所有满足条件的记录操作 • WHILE:从当前记录开始到第一个不满足条件记录之间的记录
练习 Use xs Go 3 ?recno() Go 20 ?recno() Use xs Go 3 ?recno() skip 20 ?recno() 已知XS表中的总记录数为18。
记录的修改 • 一个表只要不是只读方式打开,就可以对其记录进行编辑和修改。 • 对少量的记录直接在浏览窗口中修改。 • 批量记录的修改 • 使用“表”菜单中的“替换字段…”命令项 • REPLACE命令 • UPDATE-SQL命令UPDATE 表名 SET 字段1=表达式1[,字段2=表达式2…];WHERE 条件表达式
记录的删除 • 删除记录分两步走 • 做删除标记 • 彻底删除带标记的记录 • 界面方式删除 • 对少量的记录直接在浏览窗口中删除 • 在某一范围内删除一组符合特定条件的记录“表”菜单中的“删除记录…”命令项 • “表”“恢复记录” • “表”“彻底删除”
有关删除记录的命令 • 删除1:DELETE FROM 表名 [WHERE 条件表达式] • 删除2:DELETE [范围] [FOR/WHILE 条件表达式] • 恢复删除:RECALL [范围] [FOR/WHILE 条件表达式] • 彻底删除:PACK • 删除所有记录:ZAP(不管记录是否有删除标记) • 使用DELETE()函数可测试当前记录是否有删除标记 • 控制其它命令对有删除标记的访问 • SET DELETED ON:使命令忽略有删除标记的记录 • SET DELETED OFF:允许访问有删除标记的记录(默认)
筛选记录 • 指从表中选出满足指定条件的记录,不满足条件的记录则被“隐藏”。 • 界面方式:在“工作区属性”对话框中“数据过滤器”文本框中输入条件。 • 命令方式:SET FILTER TO 条件表达式 • 取消筛选:SET FILTER TO • 在有FOR子句的命令中,执行时进行临时性筛选。 SET FILTER TO 命令设置的过滤器不会对SELECT-SQL、 DELETE-SQL和UPDATE-SQL命令起作用。
筛选字段 • 筛选字段是选取表的部分列。 • “工作区属性”对话框中打开“字段筛选器” • 命令: • SET FIELDS ON:指定只能访问出现在字段列表中的字段 • SET FIELDS OFF:可访问所有字段(默认) • SET FIELDS TO 字段列表:指定可访问字段名称 • SET FIELDS TO ALL:可访问所有字段
数组和表之间的数据交换 • 将当前的表记录传递给数组 • 将数组的值传递到当前记录 SCATTER [FIELDS <字段名表>][MEMO] TO <数组名> [BLANK]|MEMVAR[BLANK] GATHER FROM <数组名>|MEMVAR [FIELDS <字段名表>][MEMO]
多记录和数组之间的数据交换 • 将表的多条记录传递给数组 • 将数组的值追加到表中 COPY TO ARRAY <数组名> [FIELDS <字段名表>][范围] APPEND FROM ARRAY<数组名> [FIELDS <字段名表>]
1 2 3 内存 表的使用 • 工作区 • 工作区用以标识一个打开表的区域。 • 每个工作区有一个编号。 • 在某一时刻,一个工作区中只能打开一个表。 • 一个表可以多个工作区中被多次打开。
1 xs 2 teacher 3 内存 工作区中表的别名 • 表的别名是对工作区中打开的表的一个临时标识。 • 定义表的别名 • 打开表时指定别名USE 表文件名 ALIAS 别名 • 如果在打开表时没有指定别名,则系统默认用表文件名作为别名。
当前工作区 • VFP正在使用的工作区称为当前工作区。 • 用SELECT(0)(0 可省略)测试当前工作区号。 • 用ALIAS()函数测试当前工作区中表的别名。 • 状态栏中可显示当前工作区中表的别名。 1 xs 2 teacher 3 内存
选用工作区 • 在“数据工作期”窗口中设置。 • 使用命令:SELECT 工作区号|别名 • 操作非当前工作区中的表 • 将所在工作区设置为当前工作区 • 在命令中强行指定工作区命令 IN 工作区|别名 • SELECT 0:选择未使用最小编号的工作区
打开窗口与使用窗口的区别: 使用窗口中打开的表占用当前工作区;而打开窗口中打开的表占用当前未使用的工作区。 表的打开和关闭 • 表的打开 • 界面方式:文件打开、窗口数据工作期 • 命令方式:USE 表文件名 [IN 工作区号|别名] • 一张表在多个工作区中打开用AGAIN子句 • 表的关闭 • 数据工作期窗口中关闭 • 关闭指定工作区中的表:USE [IN 工作区号|别名] • 关闭所有工作区中的表:CLOSE ALL、CLOSE DATABASE、CLOSE TABLES、QUIT
2.5 表的索引 • 记录的顺序 • 物理顺序:表中记录的存储顺序。按记录输入的时间顺序存放。 • 逻辑顺序:记录的处理顺序。对记录按某个(些)字段的值进行排序。
索引 • 索引的功能 • 根据“索引表达式”的值进行记录的逻辑排序。 • 索引机制 • 建立一个逻辑顺序号与记录号(物理顺序)的对照表。 • 索引文件 • 对照表存放的文件。一个索引文件中可存放很多索引。 • 索引更新 • 记录增、改、删后,索引要进行相应的更新,否则索引 • 与表不匹配。
索引的构成 • 索引名 • 又叫索引标识、TAG,标记一个索引的名称。 • 索引表达式 • 又叫索引关键字,是排序的依据。 • 索引类型 • 四种:主索引、候选索引、普通索引、唯一索引 • 筛选条件 • 把符合条件的记录进行索引。
索引的类型 • 主索引(Primary Indexes) • 每张表只能创建一个,关键字的值不能重复。 • 只适用于数据库表的结构复合索引。 • 候选索引(Candidate Indexes) • 关键字的值不允许有重复值。 • 普通索引(Regular Indexes) • 关键字的值可重复,一张表可建立多个。 • 唯一索引(Unique Indexes) • 允许关键字值重复,重复的值在索引表中只出现第一个。
索引文件的种类 • 两类三种索引文件 • 复合索引文件(扩展名为.CDX) • 结构复合索引文件(最普通、最重要)主文件名与表文件名同,由系统自动生成,打开与关闭与表文件同步,是表的一部分。 • 非结构复合索引文件名由用户给出,要用专门的命令打开。 • 独立索引文件(扩展名为.IDX) • 只存储一个索引的文件。
结构复合索引文件的创建 • 在“表设计器”中创建 • 用命令创建 • INDEX ON 索引表达式TAG 索引标识名 [FOR 条件表达式 ][ASCENDING|DESCENDING][UNIQUE|CANDIDATE] • 注意点: • 不能对备注型或通用型字段建立索引; • 不要建立多余的无用的索引,会降低系统性能; • 关键字由多个字段组成时要注意数据类型的一致。
索引的修改和删除 • 在“表设计器”中修改和删除索引。 • 用INDEX命令修改。(不能修改索引标识) • 用DELETE TAG命令删除索引 • DELETE TAG 标识名1 [OF CDX文件1] [,标识名2 [OF CDX文件2]] • DELETE TAG ALL [OF CDX文件名] 如果要删除的是主索引或侯选索引, 且SET SAFETY为ON时,系统会发出警告。
主控索引 • 主控索引:对表正在起作用的索引。 • 设置主控索引 • 在“数据工作期”中打开“工作区属性”对话框设置; • USE 表文件名ORDER [TAG] 标识名 [OF CDX文件名]USE 表文件名 ORDER IDX文件名USE 表文件名 ORDER 索引编号 • SET ORDER TO • [索引编号|IDX文件|[TAG] Tag名 [OF CDX文件] • [IN 工作区 | 别名] [ASCENDING | DESCENDING]]
查询 • 顺序查询 • LOCATE [<范围>][FOR<条件>] • CONTINUE • 索引查询 • FIND • SEEK <表达式>
多区操作 • 表之间的关联 • 表之间的关联指不同工作区中的两个表的记录指针同步移动的关系(需要先建立索引) • 命令 • SET RELATION TO [<关联字表达式>] INTO <别名>[ADDITIVE] • 一对多的关系 • 先用set relation to 命令 • SET SKIP TO [<表别名1>][<表别名2>] • P106-108
表之间的连接 • 将两个表连接成一个新的表,新表中的字段从不同的表中选取出来。 JOIN WITH <工作区号>|<别名> TO <新表名> [FIELDS <字段名表>] FOR <连接条件>
统计 • 计数命令 COUNT [<范围>] [FOR <条件1>] [WHILE<条件2>][TO <内存变量>] • 求和/平均值命令 SUM|AVERAGE [<数值表达式>][<范围>][FOR <条件1>] [WHILE<条件2>][TO <内存变量>] • 计算命令 CALCULATE [<表达式表>] >][<范围>] [FOR <条件1>] [WHILE<条件2>][TO <内存变量>] P111-112