资源预览内容
第1页 / 共78页
第2页 / 共78页
第3页 / 共78页
第4页 / 共78页
第5页 / 共78页
第6页 / 共78页
第7页 / 共78页
第8页 / 共78页
第9页 / 共78页
第10页 / 共78页
亲,该文档总共78页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
学习要点学习要点1、数据的分类和索引;2、记录的查找定位;3、数据的统计和计算;4、多工作区操作。5、SQL语句第第4章章 数据处理与数据处理与SQL 第第4章章 数据处理与数据处理与SQL4.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 STUDENTINDEX ON 学号 TO XHSYLIST当执行上述命令后屏幕显示结果按学号排序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 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双精度型、YCurrency(货币型)。:定义错误提示信息文本,如果是非法的,可以用指定要显示的错误信息,和必须用分号分隔。、分号、的结合体必须用一对单引号或双引号定界起来。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个工作区,每个工作区都有一个工作区号,分别用132767表示,其工作区110还分别对应有别名AJ。系统规定,用工作区号作为各个工作区的标识符,即数字132767;同时还规定,可以用工作区的别名作为工作区的标识符,AJ这10个字母是工作区的标识符,因此,单个字母AJ是不能用来作为表的文件名的,它是系统的保留字。 每个打开的表也都有一个别名,当用命令USE 打开表时,系统默认的表的别名就是该表的主文件名。如果在打开表时,在USE命令后面使用了ALIAS参数指定了表的别名,则可为表另外起一个别名,这时的表文件名就不再是表的别名。 打开表亲为表指定一个别名打开表亲为表指定一个别名命令:命令:USE ALIAS IN AGAIN 功能:功能:在指定的工作区打开指定的表文件,并为该表文件起一个别名。若省略可选项时,系统将取表的主文件名作为该表文件的别名,并且是在当前工作区中打开表文件。参数描述:参数描述:IN /:指定要选择的工作区。其中:工件区号、工作区别名都是直接指定的工作区,但不是直接指定的工作区,而是通过在已打开表文件,且别名为的工作区中先将该表文件关闭,然后再打开指定的表文件。如果省略该选择项,则为当前工作区。ALIAS :为要打开的表指定一个别名。AGAIN:若要在多个工作区中打开一个表,可以按以下方法操作:(1)选择另一个工作区,并执行带有表名和AGAIN子句的USE命令。(2)执行带有表名和AGAIN子句的USE命令,并且用IN子句指定一个不同的工作区。 2、工作区的选择与多表文件的打开与关闭、工作区的选择与多表文件的打开与关闭 若想改变当前工作区,则可使用SELECT命令来转换当前工作区。 格式:格式:SELECT /0功能:功能:选择一个工作区作为当前工作区。说明:说明:选择一个工作区作为当前工作区,使该工作区打开的表成为当前表,要选择的工作区,可使用工作区号作为标识符,也可以用工作区的别名来作为工作区的标识符。若选择0,则系统自动选取当前未使用的最小工作区号作为当前的工作区。例如,输入下列命令:SELECT 3USE STUDENT ALIAS XSSELECT 1USE SCOREUSE 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 2USE SCORE ALIAS CJSELECT 1USE STUDENTDISPLAY 学号,姓名,班级,CJ.高等数学,CJ.普通物理返返 回回4.5.2 表的关联表的关联 如果在多个工作区同时打开多个表文件,在当前工作区中移动表的记录指针时,其它表的记录指针是不会随之移动 。如果要想其它表的记录指针也随之移动,则要建立表间的关联。 关联就在二个或二个以上的表之间建立某种联接,使其表的记录指针同步移动。用来建立关联的表称为父表,被关联的表称为子表。 1、建立关联、建立关联 格式:格式:SET RELATION TO INTO / , INTO / IN /ADDITIVE 功能:功能:在两个表之间建立关联。参数描述:参数描述:指定用来在子表和父表之间建立关联的关联表达式。关联表达式经常是子表主控索引的索引表达式。可以是下列三种参数之一:1、是记录号函数RECNO()。此时,两个或多个关联表之间的联系是根据记录号来进行关联的,关联表与被关联表之间当前记录号保持相等。如果关联表记录的记录号大于被关联表的记录总数,则被关联表的当前记录指针指向最后一条记录的下一条记录,EOF()函数值为.T.。 SELECT 2USE SCORE ALIAS CJSELECT 1USE STUDENTSET RELATION TO RECNO() INTO CJ 2、是数值型表达式。此时,在表达式中通常含有RECNO()函数,每当关联表的记录指针重新定位时,被关联表的记录指针将重新定位于的值所对应的记录之上。如果的值大于被关联表文件的记录总数,则被关联表文件的当前记录指针指向最后一条记录的下一条记录,EOF()函数值为.T.。 SELECT 2USE SCORE ALIAS CJSELECT 1USE STUDENTSET RELATION TO 3*RECNO()2 INTO CJ 3、选择二个表的公共字段建立关联,使用这种方法时,要求被关联的表文件必须是按指定的公共关联字段建立并打开了索引文件。 SELECT 2USE SCORE ALIAS CJINDEX ON 学号 TO XHSYSELECT 1USE 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 SQL4.6.1 SQL的数据定义功能的数据定义功能 1 1、定义表结构语句、定义表结构语句格式:CREATE TABLE|DBF TableName1 NAME LongTableName FREE (FieldName1 FieldType (nFieldWidth ,nPrecision) NULL | NOT NULL CHECK lExpression1 ERROR cMessageText1DEFAULT eExpression1PRIMARY KEY|UNIQUEREFERENCES TableName2 TAG TagName1 NOCPTRANS,FieldName2 .,PRIMARY KEY eExpression2 TAG TagName2|,UNIQUE eExpression3 TAG TagName3,FOREIGN KEY eExpression4 TAG TagName4 NODUPREFERENCES 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-nn- -dd-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命令的特点: 属性的描述信息必须用括号括起来; 属性的描述项之间用逗号分隔; 如果不是对第一个字段定义主索引或候选索引,其子句前要加逗号分隔。 2 2、创建临时表、创建临时表格式:CREATE CURSOR alias_name(fieldname1 type (precision ,scale)NULL|NOT NULLCHECK lExpression ERROR cMessageTextDEFAULT eExpressionUNIQUENOCPTRANS, fname2 .) | FROM ARRAY ArrayName功能:创建一个临时表。该命令可以创建一个在被关闭之前一直存在的临时表。临时表始终以独占方式打开。参数描述:与CREATE TABLE命令的格式相仿,参数的含义相同,但参数比CREATE TABLE命令简单的多。该命令不能创建主索引。 【例4-16】对前述的Student表的结构,现用CREATE CURSOR命令创建临时表,取临时表的别名为CUR_Student,对Student_ID字段和Name字段创建候选索引,对Sex字段设置字段级规则和默认值。可以使用如下命令:CREATE CURSOR CUR_Student(Student_ID C(10) NOT NULL UNIQUE,;Name C(8) NOT NULL UNIQUE,;Sex C(2) CHECK Sex=男 OR Sex=女 ERROR 性别只能为“男”或“女” DEFAULT 男,;Birthday D,;Classes C(10),;Dormitory C(5),;PhoneNumber C(8)3、修改表结构语句、修改表结构语句 修改表结构有3种格式。第一种格式:添加新字段、修改已有字段。格式:ALTER TABLE TableName1 ADD | ALTER COLUMN FieldName1 FieldType (nFieldWidth ,nPrecision)NULL | NOT NULLCHECK lExpression1 ERROR cMessageText1DEFAULT eExpression1PRIMARY KEY | UNIQUEREFERENCES TableName2 TAG TagName1NOCPTRANSNOVALIDATE注意:该格式不能用来修改字段名,不能用来删除字段,也不能用来删除已定义的规则。 参数描述:TableName1:为表名,指定要修改结构的表。ADD COLUMN FieldName1:指定要添加的字段名。ALTER COLUMN FieldName1:指定要修改的字段名(字段已存在)。FieldType(nFieldWidth,nPrecision):指定新字段或待修改字段的字段类型、字段宽度和字段精度(小数点后的位数)。NULL | NOT NULL:允许(或不允许)字段为null值。CHECK lExpression1:指定字段的有效性规则。1Expressionl为逻辑表达式值,可以是用户定义的函数或内部存储过程表达式。ERROR cMessageText1:指定字段有效性检查出现错误时显示的错误信息。DEFAULT eExpression1:指定字段默认值。PRIMARY KEY:创建主索引标识索引标识与主索引字段同名。UNIQUE:创建与字段同名的候选索引标识。REFERENCES TableName2 TAG TagNamel:指定与之建立永久关系的父表。参数TAG TagNamel指定父表索引标识,关系建立在此父表索引标识基础上。NOCPTRANS:防止对字符串或备注字段转换代码页。如果需要将表转换到另一代码页,那么指定了NOCPTRANS的字段不转换。只能对字符字段和备注字段指定NOCPTRANS。【例4-17】向Grade数据表中添加一个是否考试课(IsTest,逻辑型,默认为.T.)字段。打开xsglxt数据库后,执行下面的命令:ALTER TABLE Grade ADD IsTest L DEFAULT .T.第二种格式:定义、修改和删除有效性规则和默认值定义。格式:ALTER TABLE TableName1 ALTER COLUMN FieldName2 NULL | NOT NULL SET DEFAULT eExpression2SET CHECK lExpression2 ERROR cMessageText2DROP DEFAULTDROP CHECKNOVALIDATE参数描述: ALTER COLUMN FieldName2:指定要修改的已有的字段名。注意在单独的ALTER TABLE命令中更改字段一个以上的属性时,需要多个ALTER COLUMN FieldName2子句。SET DEFAULT eExpresslon2:指定已有字段的新默认值。SET CHECK lExpression2:为已有字段指定新的有效性规则。DROP DEFAULT:删除已有字段的默认值。DROP CHECK:删除已有字段的有效性规则。【例4-18】修改数据表Grade中的TestGrade字段,将宽度改为3,无小数位。打开xsglxt数据库后,执行下面的命令:ALTER TABLE Grade ALTER TestGrade N(3)第三种格式:删除、修改字段名和定义、修改、删除记录有效性。格式:ALTER TABLEALTER TABLE TableName1 DROP COLUMN FieldName3SET CHECK lExpression3 ERROR cMessageText3DROP CHECKADD PRIMARY KEY eExpression3 TAG TagName2 FOR lExpression4DROP PRIMARY KEYADD UNIQUE eExpression4 TAG TagName3 FOR lExpression5DROP UNIQUE TAG TagName4ADD FOREIGN KEY eExpression5 TAG TagName4 FOR lExpression6REFERENCES TableName2 TAG TagName5DROP FOREIGN KEY TAG TagName6 SAVERENAME COLUMN FieldName4 TO FieldName5参数描述:DROP COLUMN FieldName3:从表中删除一个由FieldName3指定的字段。删除一个字段的同时也删除了字段的默认值和字段有效性规则。字段被删除后,索引关键字或引用此字段的触发器表达式将变为无效。在这种情况下,删除字段并不产生错误,但是在运行时刻,无效的索引关键字或触发器表达式将导致错误。 ADD PRIMARY KEY eExpression3 TAG TagName2 FOR lExpression4:往表中添加主索引,eExpression3指定主索引关键字表达式,TagName2指定主索引标识名。如果省略TAG TagName2而eExpression3是 一 个 字 段 , 则 主 关 键 索 引 标 识 与 指 定 的eExpression3同名。包含FOR lExpression4子句,可以指定只有满足筛选表达式lExpression4的记录才可以显示和访问;主索引关键字在所有文件中只为符合这个筛选表达式的记录创建的。注意,应该避免使用FOR子句创建一个主索引。DROP PRIMARY KEY:删除主索引及其标识。ADD UNIQUE eExpression4 TAG TagName3 FOR 1Expression5:往表中添加候选索引。含义与ADD PRIMARY KEY eExpression3 TAG TagName2 FOR lExpression4相同。DROP UNIQUE TAG TagName4:删除候选索引及其标识。RENAME COLUMN FieldName4 TO FieldName5:允许改变表中字段的字段名。FieldName4指定待更改的宇段名,FieldName5指定新的字段名。其它参数的做含义同前。 【例4-19】修改数据表Grade中的TestType是字段,将字段规则改为可以是“正考”、“补考”、“重修”或“其它”,同时修改错误信息,并将默认值改为“其它”,同时删除IsTest字段的默认值。打开xsglxt数据库后,执行下面的命令:ALTER TABLE Grade ALTER TestType SET DEFAULT 其它;ALTER TestType SET CHECK testtype=正考.OR.testtype=;补考.OR.testtype=重修.OR.testtype=其它;ERROR 考试类型只能是“正考”、“补考”、“重修”或“其它”;ALTER IsTest DROP DEFAULT【例4-20】修改数据表Grade中IsTest字段的字段名为NoTest,并设置默认值为.F.打开xsglxt数据库后,执行下面的命令:ALTER TABLE Grade RENAME COLUMN IsTest TO NoTest ALTER NoTest; SET DEFAULT .F.或者:ALTER TABLE Grade ALTER IsTest SET DEFAULT .F. RENAME COLUMN; IsTest TO NoTest【例4-21】删除数据表GradeDRPO TABLE Grade TOP nExpr PERCENT:在符合查询条件的所有记录中,选取指定数量或百分比的记录。TOP子句必须与ORDER BY子句同时使用。ORDER BY子句指定按哪个字段排序,TOP子句根据此排序选定开始的nExp个 或nExp %的记录。可以指定选取132767条记录。Alias.Select_Item:限定匹配项的名称。Select_Item指定的每一项在查询结果中都生成一列,如果多个项具有相同的名称,则应在这些项前加上表的别名和一个句点号,以防止出现重复的列。Select_Item可以是:FROM子句中所包含的表中的字段名称;一个常量,查询结果中的每一行都出现这个常量值;一个表达式,可以是用户自定义函数名。AS Column_Name:指定查询结果中的列标题。当Select_Item是一个表达式或一个字段函数时,如果要给此列取一个有意义的名称可用这个子句。它可以是一个表达式。FROM:列出所有从中检索数据的表。如果没有打开表,VFP6会显示“打开”对话框以便指定文件位置,表打开以后直到查询结束才关闭。FORCE:如果包含了此子句,VFP6在建立查询时会严格按照在FROM子句中申明的顺序建立联接,否则会试图对查询进行优化。避免优化过程,可能会加快查询执行的速度。DatabaseName!:当包含表的数据库不是当前的数据库时,此子句指定数据库的名称。如果数据库不是当前数据库,就必须指定包含表的数据库名称,注意其后应加上“!”号。Table AS Local_Alias:为表指定一个临时名称。如果指定了本地别名,那么在整个Select语句中都必须用这个别名代替表名。INNER JOIN:只有在其它表中包含对应记录(一个或多个)的记录才出现在查询结果中。这是内联接。LEFT OUTER JOIN:在查询结果中包含JOIN左侧表中的所有记录,以及右侧表中匹配的记录。这是左联接。RIGHT OUTER JOIN:在查询结果中包含JOIN右侧表中的所有记录,以及左侧表中匹配的记录。这是右联接。FULL OUTER JOIN:在查询结果中包含JOIN两侧表中的所有记录,这是完全联接。DatabaseName!Table AS Local_Alias:指定和当前表建立联接的表所在的数据库及表名或本地表别名。 ON JoinCondition:指定联接条件。INTO Destination:指定在何处保存查询结果。如果在同一个查询中同时包含了INTO子句和TO子句,则TO子句不起作用。如果没有包含INTO子句,查询结果显示在“浏览”窗口中。Destination可以是下列子句之一:ARRAY ArrayName:将查询结果保存到数组中。如果查询结果中不包含任何记录,则不创建这个数组。CURSOR CursorName:将查询结果保存到临时表中。如果指定了一个已打开表的名称,则VFP6产生错误信息。执行完SELECT语句后,临时表仍然保持打开、活动,但只读。DBF TableName|TABLE TableName:将查询结果保存到一个表中,如果指定的表已经打开,并且SET SAFETY设置为OFF,则VFP6在不给出任何警告信息的情况下改写该表。执行完SELECT语句后,表仍然保持打开、活动状态。TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREEN:如果命令中包含了TO子句,但没有包括INTO子句,则查询结果定向输出到名为FileName的ASCII码文件、打印机或主窗口。包含ADDITIVE子句使查询结果追加到所指定的文本文件的后面。 PREFERENCE PreferenceName:如果查询结果送往浏览窗口,就可以使用该子句保存浏览窗口的属性和选项以备后用。NOCONSOLE:不显示送到打印机、文件、或VFP6主窗口的查询结果。PLAIN:防止列标题出现在显示的查询结果中。NOWAIT:打开浏览窗口并将结果输出到这个窗口后继续程序的执行。WHERE JoinCondition:指定查询条件。指定一个字段,该字段联接FROM子句中的表。如果查询中包括不止一个表就应该为第一个表后的每一个表指定联接条件。联接多个查询条件必须使用.AND.。每个联接都是这样的形式:FieldName1 Comparison FieldName2其中:FieldName1是一个表的字段名,FieldName2是另一个表的字段名。Comparison是下列的某一操作符:=、=、LIKE、,!=,#、=、=1981 2、联接查询:基于多个关系的查询。【例4-23】查询Student表中所有学生的姓名、性别和Score表中的高等数学、普通物理的成绩。SELECT Student.Name AS 姓名,Sex AS 性别,;Score.高等数学,Score.普通物理 ;FROM xsglxt!Student INNER JOIN xsglxt!Score;3、嵌套查询:要求的结果出自于一个表,但相关的关系却涉及多个关系。【例4-24】查询有课程号为“0001”的考试成绩的学生学号、姓名、班级。SELECT Student_ID ,Name,Classes FROM Student ;WHERE Student_ID IN (SELECT Student_ID FROM Grade ;WHERE Course_ID =0001) 4、计算查询:可以使用COUNT()、SUM()、AVG()、MAX()、MIN()等函数。【例4-25】求Score表中高等数学的总分、平均分、最高分和最低分以及总人数。SELECT SUM(高等数学) AS 高数总分,AVG(高等数学) AS 高数均分,;MAX(高等数学) AS 高数最高分,MIN(高等数学) AS 高数最低分,;COUNT(RECNO() AS 总人数 FROM Score5、分组查询:用GROUP BY进行分组。【例4-26】求各班高等数学的最高分、最低分、总分和平均分。分析:由于数据分组只能按表中的字段进行,因此,本题应分为二步完成:SELECT Score.高等数学, Student.student_id, Student.classes; FROM xsglxt!score INNER JOIN xsglxt!student ; ON Score.student_id = Student.student_id; INTO CURSOR CursorTabSELECT MAX(高等数学),MIN(高等数学),SUM(高等数学),;AVG(高等数学),Classes AS 班级 ; FROM CursorTab ;GROUP BY CLASSES6、集合的并运算。【例4-27】求出全部女生和高等数学成绩在90分以上的全部学生的学号和姓名。SELECT Student_id AS 学号,Name AS 姓名 ;FROM Student ;WHERE Sex=女 ;UNION ;SELECT Student_id AS 学号,Name AS 姓名 ;FROM Score ;WHERE 高等数学90SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可以进行集合运算。集合运算主要包括并运算(union)、交运算(intersect)和差运算(minus)。本例的查询结果实际上是求女生和高等数学在90以上的并集。使用union将二个查询结果合并起来时,系统会自动去掉重复元组。 4.6.3 SQL的操作功能的操作功能1、插入记录、插入记录格式:INSERT INTO Tablename (Fieldname1 ,Fieldname2, .) VALUES (eExpression1 , eExpression2, .)或者:INSERT INTO Tablename FROM ARRAY ArrayName | FROM MEMVAR功能:以编程的方式向表中插入记录到表的尾部。参数描数:INSERT INTO Tablename :指定要插入记录的表名。Tablename中可以包含路径,也可以是一个名称表达式。如果指定的表没有打开,则VFP6先在一个新工作区中以独占方式打开该表,然后再追加记录到表中。此命令不改变当前工作区。(Fieldname1 ,Fieldname2, .):指定新记录的字段名。INSERT-SQL命令将向这些字段中插值。 VALUES (eExpression1 , eExpression2, .):指定插入记录的字段值,如果省略了字段名Fieldname1 ,Fieldname2, .,那么这些值将按照表结构字段定义的顺序来指定字段值。如果SET NULL的值为ON,INSERT-SQL会试图将null值插入在VALUES子句中没有指定的任意字段。FROM ARRAY ArrayName:指定一个数组,数组中的数据将被插入到新记录中。从第一个数组元素开始,数组中每一个元素的内容依次插入到记录的对应字段中。当包含FROM ARRAY子句时,将忽略字段的任何默认值。FROM MEMVAR:插入与字段同名的变量的值到对应字段中。如果没有与某一字段同名的变量,则该字段为空。说明:该命令执行后,记录指针指向该记录。 【例4-28】使用INSERTSQL命令向Student表中追加一条新记录,数据如下表: 可以使用下列命令:INSERT INTO Student (Student_ID, Name, Sex, Birthday, Classes,;Dormitory, Phonenumber,Age);VALUES(“1999041002”,“张中强”,“男”,1980/03/22,;99电子,3-311,2356306,20)或:INSERT INTO Student VALUES(“1999041002”,“张中强”,;男,1980/03/22,99电子,3-311,2356306,20) 2、更新、更新格式:UPDATE DatabaseName1!TableName1SET Column_Name1 = eExpression1, Column_Name2 = eExpression2 .WHERE FilterCondition1 AND | OR FilterCondition2 .功能:其功能是修改指定表中满足WHERE子句中条件表达式的元组。其中SET子句给出的eExpression1的值用于取代Column_Name1的属性值。如果省略WHERE子句,则表示要修改表中的所有元组的该属性值。 【例4-29】将99机械班全体学生的哲学成绩更新为0UPDATE Score SET 哲学=0 ;WHERE Student_ID IN (SELECT Student_ID FROM Student ;WHERE Student.Classes=99机械)3、删除、删除格式:DELETE FROM WHERE FilterCondition1 AND | OR FilterCondition2 .功能:从指定表中逻辑删除满足where子句条件的所有元组。如果省略where子句,表示删除表中的全部元组。【例4-30】带子查询的删除语句。设有二个表:库存表goods(商品编号gid,库存数量num,),订货表order_form(商品编号gid,订货数量num,),从订货表中删除库存数量小于订货数量的记录。DELETE FROM Order_form ;WHERE Order_form.num(SELECT Goods.num FROM Goods ;WHERE Order_form.gid=Goods.gid)注意:如果某些信息涉及多个表,执行删除操作可能会引起数据库的不一致,这时要考虑到相关联的表也应做相应的删除,以保证数据库的一致性。小小 结结1、分类将要生成一个新的表文件,可以使用SORT命令。2、索引不生成新的表,但产生索引文件。索引可分为单索引和复合索引,复合索引又可分为结构复合索引和非结构复合索引,提供了主索引、候选索引、唯一索引和普通索引四种。3、建立索引可以使用INDEX命令。4、数据查询可分为直接查询和快速查询,直接查询使用LOCATE命令,快速查询可以使用FIND和SEEK命令,在程序中对于不定的查询要使用GETEXPR命令。5、数据统计这里介绍了求记录数COUNT、求和SUM、求平均值AVERAGE命令。6、在USE命令中可以用IN了句指定工作区,用ALIAS子句指定别名。7、可以使用SELECT命令选择一个工作区。8、可以在多表间使用SET RELATION命令建立关联,且使用SET SKIP 命令建立一对多关联。9、可以使用JOIN命令建立表间连接。10、SQL语言包括定义、查询、操纵、控制4方面功能。 11、定义表结构语句使用CREATE TABLE 、CREATE CURSOR 、ALTER TABLE语句。12、SQL的数据修改功能使用SELECT语句,SELECT-SQL命令的核心是查询。13、SQL的操纵功能使用INSERT INTO、UPDATE、DELETE FROM 语句。返返 回回
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号