• 首页
  • 江苏计算机等级考试
  • 全国计算机等级考试
2010秋江苏省计算机等考时间:2010年10月16日 全国计算机等级考试时间:2010年9月18日
第三章表的创建和使用

第三章  表的创建和使用

内容

1.介绍数据表的基本概念

2.数据表的建立

3.编辑表中的数据、记录修改与删除

4.表的索引等有关操作。

3.1表结构

(.dbf)是数据库的基础可以说表是关系数据库系统中的基本结构。要存数据,为所需记录的信息创建一个表。由行和列组成的,一行为一个记录,一列为一个字段。表文件的后缀名:.dbf,每张表最多有255个字段,文件的文件名除必须遵守操作系统的约定外,还不能用A—J中的单个字母作文件名

如下图所示:

建表的步骤:

1)设计表结构

2)建表的结构 create 表名

3.1.1表结构的创建

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值,则应选中该栏所在框

 

3.1.2:用create table -SQL命令创建表结构

命令: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(学生)表的结构如下图:

字段名

中文含义

类型

长度

Xh

学号

字符

6

Xm

姓名

字符

8

Xb

性别

字符

2

Csrq

出生日期

日期

8

Zzmm

政治面貌

逻辑

1

Bz

备注

备注

4

下列命令用来创建xs表的结构,请将它写完整

Create ____________________(xh c(6),xm c(8), xb c(2), csrq  D,__________,bz  M)

3.1.3表的打开和关闭

刚创建的表处于打开状态*

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)将当前表复制到名称为bexcel文件

  use a

  copy to b  xls

例题:利用COPY命令可以将当前工作区的表复制到Excel中,若当前工作区已打开xs表,则使用命令COPY TO xyz___________,可以将xs表复制成Excel文件xyz.xls(2006)

例题:若要将当前工作区中打开的表文件gzb.dbf复制到gzb1.dbf中,则可以使用命令_________________(2005)

3.1.4修改表结构

1、表设计器

  项目管理器/选定表/修改

2、命令

USE books 

MODIFY STRUCTURE

修改表结构命令

ALTER TABLE-SQL命令

 添加字段:ADD [ COLUMN ]  子句

 例:在表books中增加折扣这一项

 ALTER TABLE books ADD COLUMN 折扣 n4,2

 重命名字段:RENAME  COLUMN   子句

 例:将表books中的折扣更改为zk

 ALTER TABLE books RENAME COLUMN 折扣 TO zk

 删除字段:DROP [ COLUMN ]  子句

 例:将books表中的zk字段删除

 ALTER TABLE books DROP COLUMN zk

 

3.1.5记录的处理

记录的追加

1、立即输入记录(浏览/编辑/追加方式)

2、浏览窗口下追加(USE/BROWSE)(表/追加新记录)

3、使用INSERT - SQL命令追加记录

例如:在表zgda中增加一项数据

insert into zgda(姓名,性别,年龄) values ('洪七公','',900)

4、从其他表中追加记录

命令APPEND

APPEND FROM

APPEND [ BLANK ]

3.1.6记录的浏览

1、浏览窗口

项目管理器/选定某个表/单击“浏览”按钮

2、命令

BROWSE:

例如:下列命令用于浏览学生表:

use x

browse

下列命令显示当前表中字段为书号,书名,作者的记录

BROWSE FIELDS  书号, 书名, 作者

LIST:显示当前表中所有的记录

DISPLAY:显示当前记录

注意:ListDisplay的区别,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.                            

3.1.7表文件首测试函数

¡格式: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 主窗口显示的结果为 _____________
  【程序清单】
   SET TALK OFF
   n=0
   CLEAR
   GO TOP
   DO WHILE !EOF()
     IF AT("勇",xm)>0
       n=n+1
      ENDIF
     SKIP
   ENDDO
   ?n

例题:在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

lSCAN…ENDSCAN命令显示表的记录。

USE  ZGDA

SCAN

  DISPLAY

ENDSCAN

RETURN

 

 

3.1.8记录的修改

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

3.1.9记录的删除

(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)=”98”

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工作区的标识

3.2.1工作区:

所谓工作区是指用以标识一张打开的表的区域,打开一张表时,必须给该表指定一个工作区,用数字来标识各个工作区(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 3    C. JS 3    D. JS 2

例题:设在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)

合作专区  
教育部 教育厅 江苏教育考试院 江苏教育电视台 江苏教育在线 江苏省计算机等级考试网 时代教育网
南京大学教务处 东南大学教务处 南京师范大学教务处 南京工业大学教务处 南京审计学院教务处 南京财经大学教务处 河海大学教务处 南京理工大学教务处 南京晓庄学院教务处 南京农业大学教务处 南京医科大学教务处 南通大学教务处 苏州大学教务处 南京信息工程教务处 中国药科大学教务处