VFP6电子教案第4章数据处理与SQL

上传人:xiao****1972 文档编号:244716254 上传时间:2024-10-05 格式:PPT 页数:78 大小:725.50KB
返回 下载 相关 举报
VFP6电子教案第4章数据处理与SQL_第1页
第1页 / 共78页
VFP6电子教案第4章数据处理与SQL_第2页
第2页 / 共78页
VFP6电子教案第4章数据处理与SQL_第3页
第3页 / 共78页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,学习要点,1,、数据的分类和索引;,2,、记录的查找定位;,3,、数据的统计和计算;,4,、多工作区操作。,5,、,SQL,语句,第,4,章,数据处理与,SQL,第,4,章 数据处理与,SQL,4.1,数据分类排序,4.2,数据的索引,4.3,数据的查询,4.4,数据的统计,4.5,多工作区操作,返回,退出,小 结,4.6,关系型数据库标准语言,SQL,4.1,数据分类排序,分类:,将关键字段值相同的记录按顺序存放在一起,生成一个新的表文件。,格式:,SORT TO ON /A | /D /C , /A | /D /C . ASCENDING|DESCENDING FOR WHILE FIELDS | FIELDS LIKE | FIELDS EXCEPT ,功能:,对当前选定的表排序,并将排序后的记录输出到新表中。,参数描述:,:,指定经过排序后所生成的新表的表文件名。,ON ,:,在当前选定的、要排序的表中指定关键字段,字段的内容和数据类型决定了记录在新表中的顺序。,/A | /D /C,:,指定排序顺序(升序或降序)。,/A,指定为按升序排序,,/D,指定按降序排序。如果在字符型字段名后面包含,/C,,则忽略大小写。可以把,/C,选项与,/A,或,/D,选项组合起来。,返 回,ASCENDING,:,将所有不带,/D,的字段指定为升序排列。,DESCENDING,:,将所有不带,/A,的字段指定为降序排列。如果省略,ASCENDING,和,DESCENDING,参数,则排序默认为升序。,:,指定需要排序记录的范围。默认范围为,ALL,。,FOR ,:,在当前表中指定排序中只包含逻辑条件为“真”的记录。,WHILE ,:,指定一个条件,在当前表中只要,的计算值为“真”,则依据此条件,排序中包含这条记录。,FIELDS ,:,指定用,SORT,命令排序时所创建的新表中要包含的原表中的字段。如果省略,FIELDS,子句,新表中将包含原表中的所有字段。,FIELDS LIKE ,:,在新表中包含那些与字段梗概框架相匹配的原表字段。,FIELDS EXCEPT ,:,在新表中包含那些不与字段梗概框架相匹配的原表字段。,4.2,数据的索引,索引文件有二种,,单索引文件,和,复合索引文件,,而复合索引文件又可分为,结构复合索引,文件和,非结构复合索引,文件两种。,VFP,对结构复合索引文件提供了四种类型:,主索引,、,候选索引,、,唯一索引,和,普通索引,。,主索引,是指关键字段或索引表达式中不允许出现重复值的索引,主要用于主表或被引用的表,用来在一个永久关系中建立参照完整性。一个表而言,只能创建一个主索引。,候选索引,是可以作主关键字的索引,因为它不包含,Null,值或重复值。在数据表和自由表中均可以为每个表建立多个候选索引。,唯一索引,不允许两个索引具有相同的索引值,这种要求与主索引相同。为了保持与早期版本的兼容性,可以建立一个唯一索引,以指定字段的首次出现值为基础,选定一组记录,并对记录进行排序。,普通索引,可以用来对记录排序和搜索记录,它不强迫记录中的数据具有唯一性。在一个表中可以有多个普通索引。,选择合适的索引类型可以以下列准则作为依据:,1,、如果需要排序记录,以便显示、查询或打印,可以使用普通索引、候选索引或主索引。,2,、如果要在字段中控制重复值的输入并对记录排序,则对数据表可以使用主索引或候选索引,对自由表可以使用候选索引。,3,、如果准备设置关系,则可以依据表在关系中所起的作用来分别使用普通索引、主索引或候选索引。,4.2.1,建立索引,1,、单索引文件的建立,格式:,INDEX ON TO UNIQUE FOR ADDITIVE,功能:,对当前表中满足条件的记录,按,的值建立一个索引文件,并打开此索引文件,其缺省的文件扩展名为,.IDX,。,参数描述:,:,用以指定记录重新排序的字段或表达式。,可以是字段名,也可以是含有当前表中字段的合法表达式。表达式值的数据类型可以是字符型、数值型、日期型、逻辑型。若在表达式中包含有几种类型的字段名,常常需要使用类型转换函数将其转换为相同类型的数据。,UNIQUE,:,指定,UNIPUE,子句时,若有多条记录的,的值相同时,则只把第一次遇到的记录进行排序加入到索引文件中;省略该子句时,则把所有遇到的记录值都加入到索引文件中。,ADDITIVE,:,若省略,ADDITIVE,子句,当为一个表建立新的索引文件时,除结构复合索引文件外,所有其它打开的索引文件都将会被关闭;若选择此选择项,则已打开的索引文件仍然保持打开状态。,FOR ,:,指定一个条件,只显示和访问满足这个条件的表达式,的记录,索引文件只为那些满足条件的表达式的记录创建索引关键字。,分类与索引的区别,1,、分类要生成一个新的表文件,记录的物理顺序发生了改变;,2,、分类生成的表可以单独使用。,3,、索引它并不生成新的表文件,仅仅是表中记录的逻辑顺序发生了变化,但索引也要生成一个新的文件,即索引文件。,4,、索引文件不能单独使用,它必须同表一起配合使用。,单索引文件总是按升序的顺序排列。对于一个表文件,允许建立多个索引文件。,USE STUDENT,INDEX ON,学号,TO XHSY,LIST,当执行上述命令后屏幕显示结果,按学号排序,2,、复合索引文件的建立,复合索引文件是由索引标记组成的,每个复合索引文件可包含多个索引标记,每个索引标记都有标记名,一个索引标记相当于一个单索引文件。,格式:,INDEX ON TAG OF FOR ASCENDING | DESCENDING UNIQUEADDITIVE,功能:,建立和修改复合索引文件,并打开此索引文件,其缺省的文件扩展名为,.CDX,。,参数描述:,、,FOR ,、,ADDITIVE,:,与上相同。,TAG OF ,:,创建一个复合索引文件。在,TAG ,参数中不包含可选的,OF ,子句时,便可以创建结构复合索引文件。,如果在,TAG ,参数后包含可选项,OF ,子句,则可以创建非结构复合索引文件。,ASCENDING | DESCENDING,:,ASCENDING,指定复合索引文件为升序,这是默认值。,DESCENDING,指定复合索引文件为降序。,UNIQUE,:,对于一个索引关键值,只有第一个满足该值的记录包含在,.IDX,文件或,.CDX,标识中。利用,UNIQUE,子句可以避免显示或访问记录的重复值。,说明:,执行上述命令时,系统先检查指定的复合索引文件是否存在,若存在,在此文件中增加一个索引标记,若不存在,则建立此索引文件。,标记名的命名规则与变量名的命名规则相同。,单索引文件只能按升序排列,而复合索引文件既可以按升序排列也可以按降序排列,选择,DESCENDING,为降序,选择,ASCENDING,为升序,缺省时约定为升序。,表的显示和访问顺序只由一个索引文件(主控索引文件)和标识(主控标识)控制。有一些命令使用主控索引文件和标识搜索记录,但是在修改表时,所有已打开的索引文件都将被更新。,3,、在项目管理器中建立索引,(,1,)利用表设计器的字段选项卡建立索引文件,第一步:选择,【,数据,】,选项卡,第二步:选择要建立索引的表,第三步:单击,【,修改,】,按钮,系统打开表设计器,第四步:选择要建立索引的关键字段,第五步:在“索引”下拉列表框中选择“无”、“升序”、“降序”,建立索引,第六步:单击,【,确定,】,按钮,索引选项卡,(,2,)利用表设计器的索引选项卡建立索引文件,索引选项卡,移动按钮,排序按钮,在此框中输入索引标记,在此列表框中选择索引类型,在此文本框中输入索引表达式,在此输入条件表达式,表达式生成按钮,返 回,4.2.2,使用索引,1,、打开索引文件,(,1,)在打开表时打开索引文件,复合索引文件在打开表时将自动被打开。,格式:,USE INDEX ORDER / /TAG OF ASCENDING/ DESCENDING,功能:,打开指定的表,并且打开由,指定的所有索引文件。,说明:,虽然可以同时打开多个索引文件,但同一时间只能有一个单索引文件或是复合索引文件中的一个索引标识作为主控索引,记录的操作和显示由主控索引来控制。如果,中排在第一位的是单索引文件,则该单索引就是主控索引,如果排在第一位的是复合索引文件,则还需要用,ORDER,子句规定主控索引,如果不使用,ORDER,子句,记录将仍然按记录号的顺序显,示。,2,)在,ORDER,子句中也可以使用单索引文件名、索引标记或数值表达式来规定主控索引。如:使用,ORDER ,则规定一个单索引文件作为主控索引。,3,)使用,ORDER TAG OF ,规定一个子索引文件作为主控索引,,ORDER,子句中的索引可以是结构复合索引文件中的索引标记,也可以是已经打开的非结构复合索引文件中的索引标记。,4,)使用,ORDER ,规定主控索引,以,的值作为索引文件的序号,根据序号来确定主控索引文件。系统给打开的单索引文件和复合索引文件的索引标记编号的方法是:首先按照打开索引文件时的单索引文件名的排列顺序编号,再按照结构复合索引文件中索引标记建立的顺序编号,最后按照非结构复合索引文件中的索引标记建立的顺序编号。,(2),在打开表后打开索引文件,格式:,SET INDEX TO /,?, ORDER /TAG OF ASCENDING/DESCENDING ADDITIVE,功能:,打开指定的索引文件或关闭索引文件。省略所有选项为关闭当前工作区中除结构复合索引文件外的所有索引文件。,参数描述:,:,指定要打开的一个或多个索引文件。索引文件列表中可以包含多个单索引和复合索引文件。索引文件列表中,第一个索引文件成为主控索引,它控制记录的显示和访问。,?:,显示打开对话框,从这个对话框中,可以选择和打开一个单索引文件。,ORDER ,:,指定一个索引文件或标识为主控索引文件,数值表达式指定在索引文件列表中出现的索引文件。,首先,按索引文件列表中出现的顺序给单索引文件编号;然后,按照创建标识的先后顺序,对复合索引文件中的标识编号;最后,按照创建文件的顺序对独立的复合索引文件中的标识进行编号。如果数值表达式为,0,,表中记录以物理顺序显示和访问,而索引文件保持打开状态。,ORDER ,:,指定一个单索引文件为主控索引。,ORDER TAG OF ,:,指定复合索引文件中的一个标识作为主控标识。标识名来自结构化复合索引文件或独立的复合索引文件。在打开的独立复合索引文件中,如果存在相同名称的标识,则要使用,OF ,指定标识所在的复合索引文件。,ASCENDING/ DESCENDING,:,指定显示和访问表记录时,是以升序还是以降序进行。,ASCENDING/ DESCENDING,子句要跟在,ORDER,子句的后面。,ADDITIVE,:,指定以前打开的索引文件(除结构化复合索引文件外),在发出,SET INDEX,命令打开另一个索引文件时,是否仍打开。如果没有该子句,将会关闭所有前面打开的文件。,说明:,在有索引文件的表中,记录的显示顺序和访问顺序可以由某个索引文件来决定。使用,SET INDEX,命令可以打开单索引文件和复合索引文件。如果一个表有结构化复合索引文件,打开表时该文件自动打开。,执行不带参数的,SET INDEX TO,命令,会关闭当前工作区中所有打开的索引文件(结构化复合索引文件除外)。,2,、设置主控索引,如果在打开索引文件时未指定主控索引,打开索引文件之后需要指定主控索引,或者希望改变主控索引,可使用下面的命令。,格式:,SET ORDER TO /TAG OF ASCENDING/DESCEN-DING,功能:,在打开的索引文件中指定主控索引。,参数描述:,:,指定主控索引或标识的编号。数值表达式指定的是在,USE,或,SET INDEX,中列出的索引文件或标识的序号。,:,指定作为主控索引文件的单索引文件名。,TAG OF ,:,指定复合索引文件中的一个索引标识为主控索引标识名来自结构复合索引文件或任何打开的独立复合索引文件。如果在各打开的独立复合索引文件中存在相同的标识名,应使用,OF ,来指定包含此标记的复合索引文件。,ASCENDING/DESCENDING,:,该参数用法同前。,说明:,如果命令中不使用任选项,只写,SET ORDER TO,,那么不会指定主索引,记录仍按照记录号的顺序显示,但并未关闭索引文件。,VFP,允许在,SET ORDER,命令中使用,ASCENDING,和,DESCENDING,暂时转换主控索引的顺序,但它不同于,SORT ON,命令中的,ASCENDING,和,DESCENDING,。,当数值表达式的值为,0,时,或省略所有可选项,则恢复表文件的自然顺序,但不关闭索引文件。,在打开的索引文件中,只有主控索引文件是有效。,3,、索引文件的重建或更新,当表中的记录当生变化时,如果未打开索引文件,索引文件,(,结构复合索引文件除外,),不会自动更新,要更新这些索引文件,可用下列命令:,格式:,REINDEX,功能:,重建当前打开的所有索引文件。,说明:,使用,REINDEX,命令之前,必须首先打开需要重建索引的全部索引文件。对使用包含,UNIQUE,关键字的,INDEX,命令或,SET UNIQUE ON,命令创建的索引文件,在重建索引时,仍保持,UNIQUE,状态。,返 回,4.3,数据的查询,4.3.1,直接查询命令,返 回,退 出,4.3.2,快速查询命令,4.3.3,对话查询,4.3.1,直接查询命令,直接查询也叫顺序查询,是按照记录的物理顺序逐个比较,逐个查询。,1,、,LOCATE,命令,格式:,LOCATE FOR WHILE ,功能:,按顺序搜索表,从而找到满足指定逻辑表达式的第一个记录。,参数描述:,:,指定要定位的记录范围。只有在范围内的记录才被定位。,LOCATE,命令的默认范围是,ALL,。,FOR ,:,LOCATE,命令按顺序搜索当前表以找到满足逻辑表达式的第一个记录。若逻辑表达式是可优化的表达式,则,Rushmore,优化由,LOCATE FOR,创建的查询。为了获得最佳执行效果,可在,FOR,子句中使用可优化的表达式。,WHILE ,:,指定一个条件,只要逻辑表达式计算值为真,就继续查找记录。,说明:,(1),被搜索的表不必有索引。,(2),若,LOCATE,发现一个满足条件的记录,就将记录指针定位在该记录上。可以使用,RECNO(),返回该记录的记录号,同时,FOUND(),函数返回“真”,,EOF(),函数返回“假”。如果没有找到,则将记录指针指向范围的最后一个记录,同时将,FOUND(),函数值置为“假”,屏幕上显示“已到定位范围末尾”。,(3),如果执行,SET EXACT OFF,命令后,再用,LOCATE,命令查找字符型数据时,不要求字符型数据精确匹配。,(4),该命令只能查找第一条满足条件的记录。,若表中有多条满足条件的记录,当已经找到一条满足条件的记录后,还想继续查找后面满足条件的记录时,可以使用,CONTINUE,命令继续向后查找满足条件的记录。,2,、,CONTINUE,命令,格式:,CONTINUE,功能:,它使,LOCATE,命令从当前记录开始继续查找下一条满足条件的记录。,说明:,CONTINUE,是用在,LOCATE,之后继续查找满足同一条件的记录的命令,它继续,LOCATE,的操作。,CONTINUE,命令移动记录指针到下一个与,逻辑表达式相匹配的记录上。,CONTINUE,命令能被重复执行直到记录指针到表的结尾或到指定范围的尾部。,如果,CONTINUE,命令成功地查找到了一条记录,,RECNO(),函数将返回该记录的记录号,并且,FOUND(),函数返回逻辑“真”值和,EOF(),返回逻辑“假”值。,如果,CONTINUE,命令没有查找到满足条件的记录,,RECNO(),函数返回在,table plus one,中的记录数, FOUND(),函数返回逻辑“假”值,并且,EOF(),函数返回逻辑“真”值。,返 回,4.3.2,快速查询命令,用,LOCATE,命令查询的优点是不论表中的记录是否有序都能进行查找,而其主要的缺点是查找速度慢。当表中的记录较多,并且要查询的记录又在表的底部时,问题尤为突出。为了解决这一问题,,VFP,提供了二条快速查询命令:,FIND,和,SEEK,。,1,、,FIND,命令:,格式:,FIND /,功能:,它在已经建立索引并且表文件和索引文件均已打开的表中查找索引关键值与指定的字符串或数值型常量相匹配的第一条记录。如果找到,则把记录指针指向该记录,并且将,FOUND(),函数的值置为“真”;如果没有找到与其相符的记录,则将记录指针指向表的末尾,且将,FOUND(),函数的值置为“假”,将,EOF(),函数的值置为“真”。,说明:,FIND,命令是在索引文件中查询,找到后根据记录号从表文,件中读出相应的记录。因为一个表在同一时刻只能有一个索引文件或一个索引标记为主控索引,因此,利用,FIND,命令来查找记录时,只能查找主控索引字段的值。,查询的值可以是字符串,也可以是数值。通常字符串可以不用定界符括起来,但是当字符是以空格开始时,则必须用定界符括起来;如果要查找的字符串是以定界符开头时,就必须用不同的定界符将其括起来。,查询的值如果是字符串,它可以是索引关键表达式值的全部或前几个字符,但不能是中间的或是后面的字符。,查找字符串时,只要索引表达式(建立索引文件时使用的索引表达式)是字符型的,就可以使用,FIND,命令查找,并要求组成索引表达式的字段必须是字符型的。,执行,SET EXACT,命令后,再用,FIND,命令查找字符串时,字符串可以是索引表达式值的全部或是从首字符开始的一个子串。如果执行了,SET EXACT ON,命令后再用,FIND,命令来查找字符串,则字符串只能和索引表达式的值精确匹配,即只能是,索引表达式的值的全部。,建立索引文件时,索引表达式可以是多个字段组成的表达式,若字段之间用“,+”,连接,用,FIND,命令查询时,查询内容应当是包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串,究竞是用哪一种,这取决于,SET EXACT,命令的设置;若字段之间用“,-”,号连接,用,FIND,查找时,查询内容应当不包含空格符在内的索引表达式值的全部或是从首字符开始的一个子串。,FIND,命令只能使记录指针定位于第一条符合条件的记录,而,CONTINUE,命令又不能和,FIND,命令一起配合使用,当符合条件的记录不止一条时,可用,FIND,先查到满足条件的第一条记录,因为记录是根据索引关键表达式排序了的,因此符合条件的记录是在一起的,因此可用,SKIP,命令配合,DISP,命令查找,直到发现某条记录不满足条件时为止,此记录以后的记录肯定不符合条件。,2,、,SEEK,命令:,格式:,SEEK ORDER / TAG OF ASCENDING/ DESCENDING,功能:,在打开的索引文件中快速查找与,相匹配的第,1,条记录。,参数描述:,:,指定,SEEK,搜索的关键字。,可以是空字符串。,ORDER /TAG OF ASCENDING/DESCENDING,:,指定,是以哪一个索引或索引标记为主控索引。其使用方法同设置主控索引。,说明:,当省略所有的可选项时,,SEEK,命令与,FIND,命令的功能基本,相同,但,SEEK,命令的功能更强,,SEEK,命令不仅可以查找字符串和常数,它还可以查找字符型、数值型、日期型或逻辑型表达式的值。用,SEEK,命令查找字符串常量时,字符串常量必须放在定界符中。,SEEK,命令中的表达式必须和索引表达式的类型相同。,3,、顺序查询和快速查询比较,返 回,4.3.3,对话查询,格式:,GETEXPR TO TYPE ; DEFAULT ,功能:,通过命令,GETEXPR,启动表达式生成器对话框,从中可以创建表达式,并把表达式存入内存变量或数组元素中,然后通过,LOCATE,命令宏代换进行查询,此命令常用于程序中。,参数描述:,:,指定在“表达式生成器”中显示的标题,该标题可提示生成何种类型的表达式。,TO ,:,指定存储表达式的内存变量或数组元素。如果此内存变量不存在,,VFP,将创建该变量。该命令不创建数组元素。如果按,Esc,键或选择,【,取消,】,按钮退出“表达式生成器”,将在内存变量或数组元素中存储空字符串。如果已经用,DEFAULT,子句创建了某个默认的表达式,在按,Esc,键或选择,【,取消,】,按钮退出“表达式生成器”时,将把这个默认表达式存储在内存变量中。,TYPE ;,:,指定表达式类型:,C-,字符型、,N-,数值型、,D-,日期型、,L-,逻辑型、,T-,日期时间型、,F-,浮点型、,I-,整型、,B-,双精度型、,Y-Currency,(货币型)。,:,定义错误提示信息文本,如果,是非法的,可以用,指定要显示的错误信息,,和,必须用分号分隔。,、分号、,的结合体必须用一对单引号或双引号定界起来。,DEFAULT ,:,指定在“表达式生成器”中显示初始的默认表达式。,GETEXPR,命令可以按受这个默认的表达式,该默认表达式也可用,指定的表达式改写。如果调用,GETEXPR,命令而没有输入表达式,则该默认的表达式将作为输入的表达式存储到内存变量中。,例:通过,GETEXPR,获取,LOCATE,命令中查询条件,以实现任意条件的查询。,GETEXPR ,输入查询条件, TO CXTJ TYPE L,;输入条件错误, DEFAULT ,性别,=,男,启动表达式生成器,指定表达式框中的表达式为逻辑型,且当表达式不为逻辑型时提示“输入条件错误”。,指定保存表达式的内存变量,返 回,4.4,数据的统计,4.4.1,求记录个数的命令,返 回,退 出,4.4.2,求和命令,4.4.3,求平均值命令,4.4.1,求记录个数的命令,格式:,COUNT FOR WHILE TO ,功能:,统计当前表中指定范围内满足条件的记录个数,并存于,中。,参数描述:,、,子句的用法和前面所有命令的用法是一样的。若使用,、,子句,可统计出指定,内满足,的记录个数,否则统计表中的记录的总数。对,COUNT,命令,默认的范围是,ALL,。,若使用任选项,TO ,可选项,可将统计的结果送到内存变量中保存,否则将统计结果显示在屏幕上,(SET TALK ON),。,例:,USE STUDENT,SET EXACT OFF,COUNT FOR,姓名,=,李,.OR.,姓名,=,王, TO RS,返 回,4.4.2,求和命令,格式:,SUM FOR WHILE TO /TO ARRAY ,功能:,对当前表中指定范围内满足条件的数值型字段或是由字段组成的数值型表达式累加求和,并把结果存放在对应的,标识的变量中。,若使用任选项,,则只对,中的各表达式累加求和,否则将对当前表中的所有数值型字段累加求和,数值型字段之间或表达式之间用逗号分隔开。,若使用,TO ,,可将求出的各表达式的值依次赋给各内存变量,但要注意:表达式表中的表达式的个数应该与内存变量表中的变量个数相等,若省略,,内存变量的个数应该与数值型字段的个数相等。也可将求出的各表达式的值存放于指定的数组中,一个数组元素等同于一个内存变量。,返 回,4.4.3,求平均值命令,格式:,AVERAGE FOR WHILE TO | TO ARRAY ,功能:,对当前表中指定范围内满足条件的记录的数值型字段求算术平均值,并把结果存入,中或存入,指定的数组中。,说明:,AVERAGE,和,SUM,命令的不同之处仅仅在于前者是求数值型字段或数值型表达式的平均值,而后者是求和。,若省略,,约定为,ALL,,若省略,,约定为当前表中的所有的数值型和浮点型字段。若省略,和,,则不保留结果,若系统设置为,SET TALK ON,则只显示,否则不显示。,返 回,4.5,多工作区操作,4.5.1,工作区与多个表,返 回,退 出,4.5.2,表的关联,4.5.3,表的连接,4.5.1,工作区与多个表,1,、工作区号与别名,VFP6,提供了多达,32767,个工作区,每个工作区都有一个工作区号,分别用,1,32767,表示,其工作区,1,10,还分别对应有别名,A,J,。系统规定,用工作区号作为各个工作区的标识符,即数字,1-32767,;同时还规定,可以用工作区的别名作为工作区的标识符,,A-J,这,10,个字母是工作区的标识符,因此,单个字母,A-J,是不能用来作为表的文件名的,它是系统的保留字。,每个打开的表也都有一个别名,当用命令,USE ,打开表时,系统默认的表的别名就是该表的主文件名。如果在打开表时,在,USE,命令后面使用了,ALIAS,参数指定了表的别名,则可为表另外起一个别名,这时的表文件名就不再是表的别名。,打开表亲为表指定一个别名,命令:,USE ALIAS IN AGAIN,功能:,在指定的工作区打开指定的表文件,并为该表文件起一个别名。若省略可选项时,系统将取表的主文件名作为该表文件的别名,并且是在当前工作区中打开表文件。,参数描述:,IN /,:,指定要选择的工作区。其中:工件区号、工作区别名都是直接指定的工作区,但,不是直接指定的工作区,而是通过在已打开表文件,且别名为,的工作区中先将该表文件关闭,然后再打开指定的表文件。如果省略该选择项,则为当前工作区。,ALIAS ,:,为要打开的表指定一个别名。,AGAIN,:,若要在多个工作区中打开一个表,可以按以下方法操作:,(,1,)选择另一个工作区,并执行带有表名和,AGAIN,子句的,USE,命令。,(,2,)执行带有表名和,AGAIN,子句的,USE,命令,并且用,IN,子句指定一个不同的工作区。,2,、工作区的选择与多表文件的打开与关闭,若想改变当前工作区,则可使用,SELECT,命令来转换当前工作区。,格式:,SELECT /0,功能:,选择一个工作区作为当前工作区。,说明:,选择一个工作区作为当前工作区,使该工作区打开的表成为当前表,要选择的工作区,可使用工作区号作为标识符,也可以用工作区的别名来作为工作区的标识符。若选择,0,,则系统自动选取当前未使用的最小工作区号作为当前的工作区。,例如,输入下列命令:,SELECT 3,USE STUDENT ALIAS XS,SELECT 1,USE SCORE,USE SCORE ALIAS CJ IN XS AGAIN,使用,CLOSE,命令关闭打开的表文件,格式,1,:,CLOSE DATABASE,功能:,关闭当前打开的数据库和所有打开的表文件,并使,1,号工作区成为当前工作区。,格式,2,:,CLOSE TABLE,功能:,关闭当前打开的所有表,不改变当前工作区。,格式,3,:,CLOSE ALL,功能:,关闭所在所有工作区中打开了的表、表单和单索引文件并且选择,1,号工作区为当前工作区。,CLOSE ALL,同时也关闭任何用,FCREATE()(,该函数用于创建并且打开一个低级文件,),和,FOPEN(),打开的低级文件函数。但,CLOSE ALL,不关闭用,SET PRINT,命令打开的文件。,使用,USE,命令关闭打开的表文件,格式:,USE IN /,功能:,关闭指定工作区中的表文件。,其中:,别名可以是工作区的别名,也可以是表的别名。,在单工作区操作时,用户只能操作当前工作区中的表,而在多工作区操作时,用户除了可以操作当前工作区中的记录外,还可以操作其它工作区中的表,实现多个表文件之间的数据处理。在当前工作区调用其它工作区的数据时,非当前工作区中的表文件的字段名前要加上该表文件的,和“,-”,符号,或者是,和符号”,.”,。格式如下。, -,或,.,SELECT 2,USE SCORE ALIAS CJ,SELECT 1,USE STUDENT,DISPLAY,学号,姓名,班级,CJ.,高等数学,CJ.,普通物理,返 回,4.5.2,表的关联,如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其它表的记录指针是不会随之移动 。如果要想其它表的记录指针也随之移动,则要建立表间的关联。,关联就在二个或二个以上的表之间建立某种联接,使其表的记录指针同步移动。用来建立关联的表称为父表,被关联的表称为子表。,1,、建立关联,格式:,SET RELATION TO INTO / , INTO / IN /ADDITIVE,功能:,在两个表之间建立关联。,参数描述:,:,指定用来在子表和父表之间建立关联的关联表达式。关联表达式经常是子表主控索引的索引表达式。,可以是下列三种参数之一:,1,、,是记录号函数,RECNO(),。此时,两个或多个关联表之间的联系是根据记录号来进行关联的,关联表与被关联表之间当前记录号保持相等。如果关联表记录的记录号大于被关联表的记录总数,则被关联表的当前记录指针指向最后一条记录的下一条记录,,EOF(),函数值为,.T.,。,SELECT 2,USE SCORE ALIAS CJ,SELECT 1,USE STUDENT,SET RELATION TO RECNO() INTO CJ,2,、,是数值型表达式。此时,在表达式中通常含有,RECNO(),函数,每当关联表的记录指针重新定位时,被关联表的记录指针将重新定位于,的值所对应的记录之上。如果,的值大于被关联表文件的记录总数,则被关联表,文件的当前记录指针指向最后一条记录的下一条记录,,EOF(),函数值为,.T.,。,SELECT 2,USE SCORE ALIAS CJ,SELECT 1,USE STUDENT,SET RELATION TO 3*RECNO()-2 INTO CJ,3,、,选择二个表的公共字段建立关联,使用这种方法时,要求被关联的表文件必须是按指定的公共关联字段建立并打开了索引文件。,SELECT 2,USE SCORE ALIAS CJ,INDEX ON,学号,TO XHSY,SELECT 1,USE STUDENT,SET RELATION TO,学号,INTO CJ,INTO /,:,指定被关联表的工作区或别名,也可以是被关联表的别名。,ADDITIVE,:,建立关联时,如果命令中不使用,ADDITIVE,子句,则父表以前建立的关联将自动解除;若使用了,ADDITIVE,子句,则父表以前建立的关联仍然保留。,说明:,在建立关联之前,必须打开一个表(父表),而且还必须在另一个工作区内打开其它表(子表)。相关的各表通常有一个相同的字段。父表可以同时与多个子表建立关系,称为“一父多子”的关系。,可以是字符型、数值型、日期型表达式。如果建立父子关联之前,子表已经按照关联条件建立了索引,并将该索引文件指定为主控索引,那么,每当当前工作区父表的记录指针重新定位时,就检索子表,将子表的记录指针定位于,值与,值相同的第一条记录之上。,除了可以在一个工作区中与多个表建立关联以外,还允许在多个工作区中建立多个表之间的关联,但关联不能构成循环。,这样建立的关联,只能显示一对一的关系,当要父表中的一条记录同时对应子表中的多条记录时,还要先用到,SET SKIP TO,命令,格式:,SET SKIP TO / ,/,功能:,在父表的每条记录与子表中所有对应记录之间建立“一对多”的关联。,说明:,如果已经建立了一父多子的关联,并且父表与每个子表都要建立“一对多”的关联,那么只要在,SET SKIP TO,命令中分别写出子表所在的,或者,即可。,2,、解除关联,用,SET RELATION,命令建立关联之后,当移动关联表的记录指针时,被关联表的记录指针也相应要移动,并且将要引起读,/,写磁盘操作,这样会降低系统的性能,因此,当某些关联不再使用,或暂时不再使用时,应及时解除关联,以提高系统的运行速度。,格式,1,:,SET RELATION TO,功能:,删除当前工作区表与其它工作区表建立的关联。,格式,2,:,SET RELSTION OFF INTO /,功能:,删除当前工作区与由,/,指定的工作区中表建立的关联。该命令必须在父表所在的工作区执行。例如:要关闭当前工作区与,C,工作区建立的关联。可以作下述命令进行:,SET RELATION OFF INTO C,当用,USE,关闭某些表时,系统将自动删除掉与它建立的关联。如果关闭的是父表文件,则它与子表的关联将全被删除。,当关闭父表时,将自动关闭与父表建立的所有关联。,返 回,4.5.3,表的连接,表的连接是正好与,COPY,命令相反的过程,格式:,JOIN WITH / TO FOR FIELDS ,功能:,连接当前工作区中打开的表和,/,指定的表,生成,规定的新的表文件。,参数描述:,/,:,指定第二个表的别名或所在的工作号。,FOR ,:,指定一个筛选条件。若,的值为真,则向新表中写入一个新记录。,FIELDS ,:,指定新表中包含的字段的列表。两个表中指定的字段都可以包含在,中。,说明:,JOIN,命令也可以连接两个以上的表,这时可先连接其中的两个,生成一个新的表文件后再利用,JOIN,命令连接另外的表。,返 回,4.6,关系型数据库标准语言,SQL,4.6.1 SQL,的数据定义功能,返 回,退 出,4.6.2 SQL,的数据修改功能,4.6.3 SQL,的数据操作功能,4.6.1 SQL,的数据定义功能,1,、定义表结构语句,格式:,CREATE TABLE|DBF,TableName1,NAME,LongTableName, FREE (,FieldName1,FieldType,(,nFieldWidth,nPrecision,) NULL | NOT NULL,CHECK,lExpression1,ERROR,cMessageText1,DEFAULT,eExpression1,PRIMARY KEY|UNIQUE,REFERENCES,TableName2,TAG,TagName1, NOCPTRANS,FieldName2,.,PRIMARY KEY,eExpression2,TAG,TagName2,|,UNIQUE,eExpression3,TAG,TagName3,FOREIGN KEY,eExpression4,TAG,TagName4,NODUP,REFERENCES,TableName3,TAG,TagName5,CHECK,lExpression2,ERROR,cMessageText2,),|FROM ARRAY,ArrayName,功能:创建一个含有指定字段的表。,参数描述:,TableNamel,:,为表名,指定要创建的表。其中关键字,TABLE,和,DBF,作用相同,可以任选其一。,NAME,LongTableName,:指定新表在数据库中的长名。长名最多可以包含,128,个字符。长名只对数据表有效。若不指定长名,则在数据库中使用表的文件名作为表名。,FREE,:指定所创建的表为自由表,不添加到数据库中。,FieldNamel,:指定所创建表的字段名。一个表最多可以包含,255,个字段。如果有一个以上的字段允许,Null,值,此限制将减至,254,个字段。,FieldType,(,nFieldWidth,,,nPrecision,),:指定字段类型、字段宽度和字段精度,(,小数点后的位数,),。参数,FieldType,为表示字段数据类型的单个大写字符。有些字段类型还需要参数,nFieldWidth,或,nPrecision,,或者两者皆有。,以下列出了参数,FiledType,的值及其对应参数,nFiledWidth,和,nPression,的取舍情况,字段类型,FiledType,字段宽度,nFiledWidth,精度,nPrecision,说明,n,表示字段宽度,如果后面有精度,d,,它还包括精度和小数点。,d,表示精度,即小数点的宽度。,-,表示不需要给定数据,,VFP,给定宽度。,对于,D,、,T,、,I,、,Y,、,L,、,M,、,G,和,P,型数据,省略参数,nFieldWidth,和,nPrecision,。如果对,N,、,F,或,B,型数据没有给出参数,nPrecision,的值,则其默认值为,0,。,C,(字符型),D,(日期型),T,(日期时间型,),N,(数值型),F,(浮点型),I,(整型),B,(双精度型),Y,(货币型),L,(逻辑型),M,(备注型),G,(通用型),P,(图片型),n,-,-,n,n,-,-,-,-,-,-,-,-,-,-,d,d,-,d,-,-,-,-,NULL,:在字段中允许,null,值。如果有一个以上的字段允许,null,值,表可以包含的最多字段数将减少一个,从,255,减至,254,。,NOT NULL,:在字段中不允许,null,值。如果省略,NULL,或,NOT NULL,,则以,SET NULL,的当前设置决定在字段中是否允许,null,值。但是,如果省略,NULL,和,NOT NULL,而包含,PRIMARY KEY,或,UNIQUE,子句,则,SET NULL,的当前设置无效。字段默认为,NOT NULL,。,CHECK,lExpression1,:指定字段有效性规则表达式,lExpression1,,其中可以包含自定义函数。,ERROR,cMessageText1,:指定当字段规则产生错误时,,VFP6,显示的错误信息。,DEFAULT,eExpression1,:指定字段的默认值表达式,eExpression1,,其数据类型必须和字段的数据类型相同。,PRIMARY KEY,:将此字段作为主索引。,UNIQUE,:将此字段作为一个候选索引。,注意,此处的候选索引和用,INDEX,命令的,UNIQUE,选项创建的索引不同。此处的候选索引不允许重复索引关键字。在主索引或候选索引字段中不允许,null,值和重复记录。,REFERENCES,TableName2,TAG,TagName1,指定与本表建立永久关系的父表。如果省略,TAG,TagNamel,,则使用父表的主索引关键字建立关系。可以包含,TAG,TagNamel,来与父表建立一个基于现有索引标识的关系。父表不能是自由表。,NOCPTRANS,:防止转换字符字段和备注字段到另一个代码页。,PRIMARY KEY,eExpression2,TAG,TagName2,:指定要创建的主索引。,eExpression2,指定表中的任一个字段或字段组合。,TAG,TagName2,指定要创建的主索引标识的名称。因为表只能有一个主索引如已经创建了一个主索引字段,则命令中不能包含本子句。,UNIQUE,eExpression3,TAG,TagName3,:创建侯选索引。,eExpression3,指定表中的任一字段或字段组合。但是,如果已经用一个,PRIMARY KEY,选项创建了一个主索引,则不能包含指定为主索引的字段。,TAG,TagName3,:为候选索引标识指定标识名。,FOREIGN KEY,eExpression4,TAG,TagName4,NODUP,:创建一个外部索引(非主索引),并建立和父表的关系。,eExpression4,指定外部索引关键字表达式,而,TagName4,为要创建的外部索引关键字标识指定名称。包含,NODUP,来创建一个候选外部索引。,FROM ARRAY,ArrayName,:指定一个已存在的数组名称,数组中包含表的每个字段的名称、类型、精度以及宽度。,使用说明:新表在最低的未使用的工作区中打开;并可以通过其别名来访问;不管,SET EXCLUSIVE,的当前设置如何,新表都以独占方式打开。如果打开了数据库,并且没有包含,FREE,子句,则新表自动添加到数据库中。需要注意的是,CREATE TABLE,命令的语法使用逗号分隔一定的,CREATE TABLE,选 项。同时,NULL,、,NOT NULL,、,CHECK,、,DEFAULT,、,PRIMARY KEY,和,UNIQUE,子句必须将其放在包含字段定义的括号中。,【,例,4-15,】,使用,CREATE TABLE,命令建立一个,Grade,表,并将其加入到,xsglxt,数据库,其表结构如表,4-2,所示,考试类别的值,默认值为“正考”,出错是信息是:考试类别只能是“正考”、“补考”或“重修”,先打开,xsglxt,数据库,然后执行命令如下:,CREATE TABLE Grade(Student_ID C(10) NOT Null,;,Course_ID C(4) NOT Null,;,TestType C(4) NOT Null CHECK TestType=,正考, OR TestType; =,补考, OR TestType=,重修, ;,ERROR ,考试类别只能是“正考”、“补考”或“重修”,;,DEFAULT,“,正考”,;,PRIMARY KEY Student_ID + Course_ID + TestType TAG SCT,;,TestDate D NOT Null,;,TestGrade N(5,1) NOT Null),执行后建立基本表结构,Grade,,包括,5,个字段。从,Grade,表结构的定义中可以看出,CREATE TABLE,命令的特点:,属性的描述信息必须用括号
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!