|
2010秋江苏省计算机等考时间:2010年10月16日 全国计算机等级考试时间:2010年9月18日
|
第三章表的创建和使用 |
||||||||||||||||||||||||||||
第三章 表的创建和使用
内容 1.介绍数据表的基本概念 2.数据表的建立 3.编辑表中的数据、记录修改与删除 4.表的索引等有关操作。 3.1表结构 表(.dbf)是数据库的基础可以说表是关系数据库系统中的基本结构。要存数据,为所需记录的信息创建一个表。由行和列组成的,一行为一个记录,一列为一个字段。表文件的后缀名:.dbf,每张表最多有255个字段,文件的文件名除必须遵守操作系统的约定外,还不能用A—J中的单个字母作文件名 如下图所示: 建表的步骤: 1)设计表结构 2)建表的结构 create 表名 1、通过表设计器建表 (1)打开“表设计器” 步骤:项目管理器à数据à自由表à新建à保存 注: A、也可从菜单或工具栏中直接新建表 B、与在“项目管理器”中新建表不同的是: 这样新建的表将不包含在项目中 (2)在“表设计器”中创建表结构 表设计器à字段à输入à确定 表的字段 字段的属性(表结构) (1)字段名 (2)字段类型 (3)字段宽度 (4)小数位数 1.字段名 约定:只能使用字母、汉字、下划线和数字,字段名必须以字母或汉字开头,并且长度不能超过128个字符 2.字段类型 不同类型的字段来存储不同类型的数据 (1)字符型(Character)(2)货币型(Currency)(3)数值型(Numeric) (4)浮点型(Float)(5)日期型(Date) (6)日期时间型(DateTime)(7)双精度型(Double)(8)备注型(Memo)(9)通用型(General) (10)整型(Integer) (11)逻辑型(Logical) C-字符型 N-数值形 F-浮点型 D-日期型 I- 整 型 L-逻辑型 M-备注型 G-通用型 Y货币型 3.宽度(Width) ( 以下类型宽度固定) 货币型、日期型、日期时间型、双精度型:8 字节 整型、备注型、备注型(二进制)、通用型:4 字节 逻辑型:1 字节 4.空值(NULL) 空值是用来标识一个字段“ 没有值” 的标志 ,空值表示没有任何值或没有确定值 ,空值不等同于数值0、空字符串或逻辑“假” ,如果允许字段接受NULL值,则应选中该栏所在框 命令:create table |DBF表文件名(字段名1 字段类型[(字段宽度[,小数位数])];[,字段名2 字段类型[(字段宽度[,小数位数])]]…)----编程时用 例:创建学生表结构 create table xs2(xh c(6),xm c(8),xb c(2),zydh c(6)) 创建教师表结构 create table js(xm c(8),xb c(2),gl n(2,0),csrq d,jbgz n(7,2),jl m) 数据表的建立 xs(学生)表的结构如下图:
下列命令用来创建xs表的结构,请将它写完整 Create ____________________(xh c(6),xm c(8), xb c(2), csrq D,__________,bz M) 刚创建的表处于打开状态* 1、表的打开命令 USE < 表文件名> USE < 表文件名> IN 0 多次打开同一张表(同时) USE < 表文件名> AGAIN 例:USE XS AGAIN 2、表的关闭命令 USE USE IN < 别名/ 工作区> CLOSE ALL&& 数据库、索引、项目管理器等也被关闭 CLOSE DATABASES && 如果当前没有打开的数据库,则把自由表全部关闭 CLOSE TABLES && 关闭表,不关闭库 注意:SQL 语句能自动打开表,但不会自动关闭表! 3.记录的复制: (1)将当前表a.dbf复制到b.dbf的命令: use a Copy to b (2)将当前表复制到b文本文件: use a copy to b sdf (3)将当前表复制到名称为b的excel文件 use a copy to b xls 例题:利用COPY命令可以将当前工作区的表复制到Excel中,若当前工作区已打开xs表,则使用命令COPY TO xyz___________,可以将xs表复制成Excel文件xyz.xls(2006春) 例题:若要将当前工作区中打开的表文件gzb.dbf复制到gzb1.dbf中,则可以使用命令_________________(2005春) 1、表设计器 项目管理器/选定表/修改 2、命令 USE books MODIFY STRUCTURE 修改表结构命令 ALTER TABLE-SQL命令 添加字段:ADD [ COLUMN ] 子句 例:在表books中增加折扣这一项 ALTER TABLE books ADD COLUMN 折扣 n(4,2) 重命名字段:RENAME COLUMN 子句 例:将表books中的折扣更改为zk ALTER TABLE books RENAME COLUMN 折扣 TO zk 删除字段:DROP [ COLUMN ] 子句 例:将books表中的zk字段删除 ALTER TABLE books DROP COLUMN zk 记录的追加 1、立即输入记录(浏览/编辑/追加方式) 2、浏览窗口下追加(USE/BROWSE)(表/追加新记录) 3、使用INSERT - SQL命令追加记录 例如:在表zgda中增加一项数据 insert into zgda(姓名,性别,年龄) values ('洪七公','男',900) 4、从其他表中追加记录 命令APPEND APPEND FROM APPEND [ BLANK ] 1、浏览窗口 项目管理器/选定某个表/单击“浏览”按钮 2、命令 BROWSE: 例如:下列命令用于浏览学生表: use x browse 下列命令显示当前表中字段为书号,书名,作者的记录 BROWSE FIELDS 书号, 书名, 作者 LIST:显示当前表中所有的记录 DISPLAY:显示当前记录 注意:List与Display的区别,list显示表中所有的记录,而display显示当前记录 3.记录的定位 当一张表打开后,系统自动地为该表生成三个标志:记录的开始标志,记录指针标志,记录的结束标志。记录指针指向的那条记录称为”当前记录” (1)记录定位的实现 界面方式 (“ 表 ”—“ 转到记录 ”) 记录号:绝对定位 goto/go goto(goto) top 移动到第1条记录 go(goto) bottom 移动到最后一条记录 相对定位:SKIP(与索引有关)skip=skip 1 例如: skip 2 指针从当前位置向下移动2条 例如:以下命令是显示记录定位的示例 close tables all use xs goto 4 &&记录指针移动到记录号为4的记录 goto top &&记录指针移动到第1条记录 skip 4 &&记录指针下移4条记录 skip -2 &&记录指针上移2条记录 Locate For xm=’李刚’ &&记录指针指向姓名为’李刚’的记录或文件末尾 表文件尾测试函数 系统对表中的记录是逐条进行处理的。对于一个打开的表文件来说,在某一时刻只能处理一条记录。VFP为每一个打开的表设置了一个内部使用的记录指针,指向正在被操作的记录,该记录称为当前记录 。记录指针的作用是标识表的当前记录。 ¡表文件的逻辑结构最上面的记录是首记录,记为TOP,最下面的记录是尾记录,记为BOTTOM。在第一个记录之前有一个文件起始标识,称为(BOF)在最后一个记录的后面有一个文件结束标识,称为(EOF)。使用测试函数能够得到指针的位置。刚刚打开表时,记录指针总是指向首记录。 测试函数 ¡格式:EOF([〈工作区号〉|〈表别名〉]) ¡功能:测试指定表文件中的记录指针是否指向文件尾,则是返回逻辑真.T.,否则返回逻辑假.F.。 ¡说明:表文件尾是指最后一条记录的后面位置。若缺省自变量,则测试当前表文件。若在指定工作区上没有打开表文件,函数返回逻辑假.F.。若表文件中不包含任何记录,函数返回逻辑真.T.。 例如: l USE ZGDA l GO BOTTOM l ? EOF() l .F. l SKIP l ? EOF(),EOF(2) &&2号工作区没有打开表 l .T. .F. ¡格式:BOF([〈工作区号〉|〈表别名〉]) ¡功能:测试当前表文件(若缺省自变量)或指定表文件中的记录指针是否指向文件首,若是返 回逻辑真.T.,否则返回逻辑假.F.。 ¡说明:表文件首是指第一条记录的前面位置。若指定工作区上没有打开表文件,函数返回逻 l辑假.F.。若表文件中不包含任何记录,函数返回逻辑真.T.。 l6.记录号测试函数 ¡格式:RECNO([〈工作区号〉|〈表别名〉]) ¡功能:返回当前表文件(若缺省自变量)或指定表文件中当前记录(记录指针所指记录)的记录 l号。 ¡说明:如果指定工作区上没有打开表文件,函数值为0。如果记录指针指向文件尾,函数值 l为表文件中ta的记录数加1。如果记录指针指向文件首,函数值为表文件中第一条记录的记录 l号。 l7.记录个数测试函数 ¡格式:RECCOUNT([〈工作区号〉|〈表别名〉]) ¡功能:返回当前表文件(若缺省自变量)或指定表文件中的记录个数。如果指定工作区上没有 l打开表文件,函数值为0。 ¡说明:该函数返回的是表文件中物理上存在的记录个数。不管记录是否被逻辑删除以及SET l DELETED的状态如何,也不管记录是否被过滤(SET FILTER),该函数都会把他们考虑在内。 l例如: ¡ USE ZGDA &&假定表中有8条记录 ¡ ? BOF(),RECNO() &&显示.F. 1 ¡ SKIP -1 ¡ ? BOF(),RECNO() &&显示.T. 1 ¡ GO BOTTOM ¡ ? EOF(),RECNO() &&显示.F. 8 ¡ SKIP ¡ ? EOF(),RECNO(),RECCOUNT() &&显示.T. 9 8 例题:在某教学管理数据库中有一个学生表( XS.DBF ),其表结构及其所含有的记录数据如表 1 所示。 若学生表已在当前工作区打开,运行下列程序后在 VFP 主窗口显示的结果为 _____________ 。 例题:在VFP中,测试表文件指针是否已到文件尾的函数是__________(2004秋) A.BOF() B.EOF() C.END() D.FILE() SCAN—ENDSCAN循环 l语句格式: SCAN[〈范围〉][FOR〈条件表达式〉] 〈命令序列〉 [LOOP] [EXIT] ENDSCAN 语句功能: lSCAN的功能是在表中移动并重执行命令序列 l循环开始时记录指针指向满足条件的第一个记录 l执行到ENDSCAN时,记录指针指向第二个满足条件记录 l控制又回到SCAN循环的开始,直到所有记录处理完,循环也就结束了 【例】 l查找职称为“讲师”的记录,计算满足条件的记录个数(工资的总和) SET TALK OFF USE ZGDA S=0 N=0 SCAN FOR 职称="讲师" DISPLAY S=S+工资 N=N+1 ENDSCAN USE RETURN l用SCAN…ENDSCAN命令显示表的记录。 USE ZGDA SCAN DISPLAY ENDSCAN RETURN 1、在浏览窗口中修改 输入命令:EDIT / CHANGE / BROWSE 项目管理器/浏览 例:修改books表中第5条记录 use books edit record 5 记录的修改 2、批量记录的修改 (1)界面方式 “表”—“替换字段”—字段条件 (2)命令方式 UPDATE-SQL命令(表不必事先打开,以下同) 格式:Update 表名 set 字段名=值 where 字段名= 例如:下列命令将js表中所有工龄满30年的教师工资加100 Update js set jbgz=jbgz+100 where year(date())-year(gzrq)>29 REPLACE 命令 格式:Replace 字段 with 值 For 例如:下列命令将js表中所有工龄满30年的教师工资加100 close tables all use js Replace jbgz with jbgz+100 For year(date())-year(gzrq)>29 (1)逻辑删除 :标记要删除的记录 命令DELETE FROM 表名[WHERE 过滤条件表达式] 例:给教材表中库存在数量为0的记录加删除标记 delete from books where 库存数量=0 物理删除:彻底删除表中带有删除标记的记录 命令PACK 删除有删除标记的记录 例如:彻底删除xs表中98级的学生 Close tables all use xs Delete from xs where substr(xh,1,2)=” Pack 需要注意一个特殊命令ZAP,ZAP表示删除表中哦你的全部记录,而不管表中的记录是否有删除标记 ZAP=Delete All+Pack (2)恢复带删除标记的记录(与set dele 无关) 命令:RECALL [ 范围][FOR 条件表达式1][WHERE 条件表达式2] 例: recall &&恢复当前逻辑删除记录 recall all &&恢复所有逻辑删除记录 recall all for 库存数量=0 (这里的all 可省) 说明: 缺省范围(当前记录,不是全部记录) (3)对带删除标记记录的访问 (1) 测试记录的删除标记deleted() 有删除标记返回为真,否为假 (2) 控制对带删除标记记录的访问 set deleted on/off 说明: 为set deleted on时屏蔽带有删除标记的记录,不能访问 3.2工作区的标识
所谓工作区是指用以标识一张打开的表的区域,打开一张表时,必须给该表指定一个工作区,用数字来标识各个工作区(1—32767)用相应工作区中表名来标识工作区 Select 5 &&选择第5个工作区 Use zgda &&打开zgda表 Sele 4 &&选择第四个工作区 Sele zgda &&选择zgda工作区 1-10 个工作区常用英文字母A-J Sele 10=sele j 工作区的转换 命令: Select 工作区号/工作区中表别名/A-J 如: Sele 1 Use zgda Sele B Selct zgda Select 0 表示选择未用的号最小工作区 select() 返回选择的工作区号 例题:有如下一段程序:(2005春) CLOSE TABLES ALL USE XS SELE 3 USE JS USE KC IN 0 BROW 上述程序执行后,浏览窗口中显示的表及当前工作区号分别是 _____________ A. KC 、 2 B. KC 、 例题:设在1号工作区中打开xS表,若要求在2号工作区中再次打开xs表且别名设置为XUESHENG,则可使用命令:USE XS( ) xuesheng IN 2 AGAIN (2008春) 3.3索引文件
1、索引: 表的记录通常是按其输入时间顺序存放的,这种顺序称为记录的物理顺序,为了实现对表记录的快速查询,可以对表文件中的记录按某个字段值或某些字段排序,这种顺序称为逻辑顺序 索引是为了方便查询,而将表中的记录重新排序,而物理顺序并没有改变。 2、索引的类型 主索引(Primary indexs) 在数据库表中,每张表只能创建一个主索引 组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值(学号可以,姓名不可以)自由表不能建立主索引,主索引存储于数据库表的结构复合索引中 侯选索引(Candidate indexs) 在指定的关键字段或表达式中不允许有重复值的索引,一张表中可以建立多个侯选索引侯选索引可用于数据库表和自由表 普通索引(Regular indexs) 可以决定记录的处理顺序,允许关键字段或表达式的值出现重复,对一张表可以创建多个普通索引(GL) 唯一索引(Unique indexs) 允许有重复值,具有重复值的记录仅存储其中的第一个(出版社)惟一:对每一个特定的关键字只存储一次,而忽略了重复值第二次或以后的记录 3、索引文件的种类 索引本身并不改变表中数据的物理顺序 索引分为:结构复合索引(CDX)、非结构复合索引(CDX)、独立索引(IDX) 4.创建索引文件 (1)通过表设计器建立索引 “表设计器”——“索引”选项卡 注意:不能对备注字段和通用字段建立索引 索引的建立 操作步骤: 项目管理器--选择已有的表,选“修改”表设计器,选索引,输入索引的名称在“表达式”框中,输入对多个索引的表达式 如:按性别与年龄进行索引,其表达式应为 性别+STR(年龄,2) 可以对多个字段建立索引,其排序是按照表达式的值进行的 (2)使用Index命令建立索引 INDEX ON <索引表达式> TAG <索引标识名> [FOR <条件表达式>ASCENDING|DESCENDING][UNIQUE|CANDIDATE](允许相同|不允许相同) 5.索引的使用 设置主控索引 主控索引:决定显示或访问表中记录的顺序的索引 (1)打开表的同时指定主控索引 Use 表名 index 索引文件名 (2)打开表后再设置主控索引 命令 SET ORDER TO TAG < 标识名> 例题:某表含有两个字段,xx(字符型)和YY(日期型).若要创建一个索引,要求先根据XX字段排序,XX字段相同时再根据YY字段排序,则索引表达式可以设置为xx+___________(2008秋) 例题:VFP支持三种不同的索引文件,即_______索引文件、非结构复合索引文件和独立索引文件(2008春) |
||||||||||||||||||||||||||||
| |||
|