资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,4,章 结构化查询语言,SQL,和报表,SQL,语言的基本概述,数据定义语言,DDL,数据操纵语言,DML,查询和,SELECT,命令,报表和标签,小结,2026/10/25,1,4.1 SQL,语言的基本概述,结构化查询语言(,Structured Query Language,,简称,SQL,),SQL,是用于对存放在计算机数据库中的数据进行组织、管理和检索的工具,是一种用于和数据库进行交互通信的计算机语言。,SQL,是,1974,年由,Boyce,和,Chamberlin,提出的,并在,IBM,公司研制的,System R,上首次实现了这种语言,由于它的功能丰富,使用方式灵活和语言简洁易学等突出特点,很受计算机界的欢迎。现在,SQL,语言已成为关系型数据库操纵语言的国际标准。,VFP,提供了,SQL,语言支持,2026/10/25,2,4.1.1 SQL,语言的基本概念,SQL,语言支持关系型数据库的三级模式结构,其中外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。,在,SQL,语言中,一个关系就对应于一个表,基本表本身是独立存在的表,对应一个存储文件;存储文件的逻辑结构组成了关系型数据库的内模式。,视图是从基本表或其他视图导出的表,视图只是一个虚表。,在用户看来,视图和基本表都是关系,而存储文件对用户是透明的。,2026/10/25,3,4.1.2 SQL,的基本功能,SQL,语言由,3,部分组成:,数据定义语言,DDL,(,Date Definition Language,)。,数据操纵语言,DML,(,Date Manipulation Language,)。,数据控制语言,DCL,(,Date Control Language,)。,其主要命令如表,4-1,所示。,SQL,功能,命令,数据定义语言,DDL,Create,、,Drop,、,Alter,数据操纵语言,DML,Select,、,Insert,、,Update,、,Delete,数据控制语言,DCL,Grant,、,Revoke,其中,数据定义语言,DDL,提供了完整的定义数据库所必需的语言工具,用来,创建、修改、删除数据库对象;数据操纵语言,DML,用于查询或者修改数据;,数据控制语言,DCL,用来管理用户的访问权限,由于,VFP,没有权限管理功能,,所以不支持,DCL,命令。,2026/10/25,4,4.2,数据定义语言,DDL,数据定义语言是对关系模式的一级定义,用来定义被存放数据的结构和组织,以及数据项之间的关系。,SQL,数据定义语言可以用来定义数据表、视图和索引。,Create,语句:用于定义和生成数据对象,比如创建表、视图和索引。,Drop,语句:用于删除一个现有的数据对象,比如视图、表、索引。,Alter,语句:用于改变一个数据库对象。比如对一个表的字段进行删除、添加和修改,或者修改表的结构。,2026/10/25,5,4.2.1,用,Create,语句创建基本表(续),【例,4.1,】在图书馆管理系统中创建,dzzl,(,读者种类)表,包含,zlbh,(,种类编号)、,zlmc,(,种类名称)、,jssl,(,借书数量)、,jsqx,(,借书期限)、,bz,(,备注)几个字段。,OPEN DATABASE,图书馆管理,CTEATE TABLE dzzl(zlbh c(10)not null,zlmc c(10)not null,jssl c(8),jsqx c(8),Bz c(20),若在命令窗口执行,MODIFY STRUCTURE,命令,就可以在弹出的,对话框中见到,dzzl,表结,构,如图,4-2,所示。,图,4-2,创建的,dzzl,表结构,2026/10/25,8,4.2.1,用,Create,语句创建基本表(续),【例,4.2,】创建一个名为“通讯录”的自由表,包含姓名、工作单位、电话号码、家庭住址,4,个字段,所得的表预览如图,4-3,所示。,CREATE TABLE,通讯录,FREE(,姓名,C(10),工作单位,C(20),电话号码,C(12),家庭住址,C(20),BROWSE,由于没有向表中添加任何记录,所以在预览时看不见任何的记录。,图,4-3,创建的通讯录表,2026/10/25,9,4.2.1,用,Create,语句创建基本表(续),【例,4.3,】创建一个“图书订单”的数据库,并在此数据库中创建一个“图书”表,图书表含有订单号、图书编号、书名、单价、数量等字段。,CREATE DATEBASE,图书订单,CREATE TABLE,图书,(,订单号,C(10);,DEFAULT 10001,图书编号,C(10)PRIMARY KEY,;,书名,C(10),单价,N(8,2);,数量,N(6)CHECK,数量,=100,AND,数量,=1000;,ERROR,数量范围在,100,和,1000,之间,),图,4-4,图书表的索引图,预览此表的设计器可,以看见“图书编号”已,经被设为主索引,如,图,4-4,所示。,2026/10/25,10,4.2.1,用,Create,语句创建基本表(续),【例,4.4,】在图书订单数据库中建立一个新表“订单”表,含有订单编号、图书编号、客户编号、订货日期、发货日期几个字段。,OPEN DATABASE,图书订单,CREATE TABLE,订单,(,订单编号,C(10)PRIMARY KEY,;,客户编号,C(10),订货日期,D,发货日期,D;,图书编号,C(10),FOREIGN KEY,图书编号,;,TAG,图书编号,REFERENCES,图书,),图,4-5,图书表和订单表之间的关系,在命令窗口中输入,“,MODIFY DATABASE,订数订单”,命令,可在弹出的“数据库设计器”,窗口中见到图书表和订单表之间已,建立的关系,如图,4-5,所示。,2026/10/25,11,4.2.2,用,Alter,修改基本表,命令格式,1,:,ALTER TABLE ADD/ALTERCOLUMN,(,字段宽度,小数位数,),NULLNOT NULL,CHECKERROR,DEFAULT,PRIMARY KEY/UNIQUE,REFERENCESTAG,命令功能:修改表中原有的字段,或者在表中增加新的字段。,2026/10/25,12,4.2.2,用,Alter,修改基本表(续),命令说明:,ADD COLUMN(,字段宽度,小数位数,),:增加新字段,并指定新增字段的名称、类型、字段宽度及小数位数。,NULLNOT NULL,:指定新字段是否接受空值。,ALTER COLUMN(,字段宽度,小数位数,),:修改原有字段,并指定修改后的字段名称、类型、字段宽度及小数位数。,其他的参数含义同,CREATE TABLE,。,2026/10/25,13,4.2.2,用,Alter,修改基本表(续),【例,4.5,】修改在例,4.2,中创建的通讯录表,增加一个“性别”字段,,SQL,命令如下:,ALTER TABLE,通讯录,ADD COLUMN,性别,C(10),再把表中字段“家庭住址”修改为“工作地址”,,SQL,命令如下:,ALTER TABLE,通讯录,RENAME COLUMN,家庭住址,TO,工作地址,预览修改后的表如图,4-6,所示,与图,4-3,对比就可以发现多出了一个字段“性别”,字段“家庭住址”改为了“工作地址”。,图,4-6,修改后的通讯录表,2026/10/25,14,4.2.2,用,Alter,修改基本表(续),【例,4.6,】修改例,4.3,中创建的图书表,将“书名”字段的宽度改为,20,且不准为空值。,SQL,命令如下:,OPEN DATABASE,图书订单,ALTER TABLE,图书,ALTER,书名,C(20)NOT NULL,命令格式,2,:,ALTER TABLE,ALTER COLUMN,NULLNOT NULL,SET CHECK,ERROR,SET DEFAULT,DROP CHECK,DROP DEFAULT,2026/10/25,15,4.2.2,用,Alter,修改基本表(续),命令功能:删除或者设置字段的默认值或约束条件。,命令说明:,SET CHECK,ERROR,:为字段设置约束条件。,SET DEFAULT,:设置默认值。,DROP DEFAULT,:,删除默认值。,DROP CHECK,:,删除约束条件。,2026/10/25,16,4.2.2,用,Alter,修改基本表(续),【例,4.7,】在例,4.3,创建的图书表中,为“图书编号”字段设置一个默认值,200601,并删除数量的约束条件,,SQL,命令如下:,ALTER TABLE,图书,ALTER,图书编号,SET DEFAULT 200601,ALTER TABLE,图书,ALTER,数量,DROP CHECK,2026/10/25,17,4.2.2,用,Alter,修改基本表(续),命令格式,3,:,ALTER TABLE,DROP COLUMN,ADD PRIMARY KEY,TAG,DROP PRIMARY KEY,ADD UNIQUE,TAG,DROP UNIQUE TAG,SET CHECK,ERROR,DROP CHECK,ADD FOREIGN KEY,TAG,REFERENCES,TAG,DROP FOREIGN KEY TAG,SAVE,RENAME COLUMN,TO,2026/10/25,18,4.2.2,用,Alter,修改基本表(续),命令功能:删除表中的字段、设置或删除表的主索引、候选索引、对字段重新命名或者删除指定的字段的约束条件。,命令说明:,DROP COLUMN,:删除指定的字段。,ADD PRIMARY KEY,TAG,:建立主索引。,DROP PRIMARY KEY,:,删除主索引。,ADD UNIQUE,TAG,:建立候选索引。,DROP UNIQUE TAG,:删除候选索引。,ADD FOREIGN KEY,TAG,:建立外索引。,REFERENCES,TAG,:指定建立关联的父表。,DROP FOREIGN KEY TAG,SAVE,:,删除外索引。,RENAME COLUMN,TO,:对字段重新命名,。,2026/10/25,19,4.2.2,用,Alter,修改基本表(续),【例,4.8,】在例,4.3,创建的图书表中,为“书名”创建一个候选索引,并且删除“数量”字段,如图,4-7,所示。,SQL,语句如下:,ALTER TABLE,图书,ADD UNIQUE,书名,;,ALTER TABLE,图书,DROP COLUMN,数量,图,4-7,例,4.8,图,在图,4-7,中,字段“数量”被删除,,并创建候选索引“书名”。,2026/10/25,20,4.2.2,用,Alter,修改基本表(续),【例,4.9,】在第,1,章创建的“图书管理系统”的,dzzl,中,为,jssl,创建一个默认值,15,,当输入有错误时就会显示“值为,15,”,删除表中的候选索引。,SQL,语句如下:,ALETER TABLE dzzl ALTER jssl SET DEFAULT 15;,ERROR“,值为,15”;,ALETER TABLE dzzl DROP UNIQUE TAG zlbh,2026/10/25,21,4.2.3,用,DROP,命令删除一个表,随着数据库设计的变化,数据库的结构也在不断的变化,新建的表就会不断地代替旧表,这时某些旧表就不再需要了,可以用,DROP TABLE,命令删除它。,命令格式:,DROP TABLE,命令功能:删除一个表,包括在这个表上建立的索引。,命令说明:,:指定被删除的表。,【例,4.10,】删除在例,4.2,中创建的通讯录表,,SQL,命令如下:,DROP TABLE,通讯录,2026/10/25,22,4.3,数据操纵语言,DML,数据操纵实际上就是管理数据,这也是创建表的基本目的,主要是对关系中的具体数据进行查询、更新、删除和插入,但不能够改变数据的结构。,DML,命令如表,4-2,所示。,命令,功能,UPDATE,更新数据库中的已有数据,DELETE,用于从数据表中删除数据,INSERT,增加一个新的数据到表中,SELECT,数据查询,表,4-2,DML,的命令及功能,2026/10/25,23,4.3.1 INSERT,命令,用,CREATE TABLE,命令创建一个表后,创建的表中没有具体的数据,可以用,INSERT,命令向表中插入数据。,命令格式:,INSERT INTO,表名,(,列名,1,列名,2,)VALUES(,),命令说明:,INTO,表名:指定接受新数据的目标表。,VALUES,:指明增加记录的字段值。,向表中添加的数据必须与指定字段名的类型相匹配。,字符串要用单引号或者双引号括起来,日期型可用,CTOD,函数处理或者直接引用。,2026/10/25,24,4.3.1 INSERT,命令(续),【例,4.11,】在例,4.4,创建的订单表中插入一个新的记录:,订单编号:,200601,读者编号:,10001,订货日期:,2006-02-1,发货日期:,2006-02-10,图书编号:,100012,使用,INSERT,语句把该记录插入到订单表中,,SQL,语句如下:,INSERT INTO,订单,(,订单编号,读者编号,订货日期,发货日期,图书编号,);,VALUES(200601,10001,CTOD(02-1-06),CTOD(02-10-06),100012),2026/10/25,25,4.3.2 UPDATE,命令,UPDATE,语句用来更新表中的记录。,命令格式:,UPDATE,SET=,=,WHERE,命令说明:,UPDATE,:指明要修改的记录的表的名称。,SET,:指明更新的字段名和字段值。,WHERE,:限定要修改的行,如果没有,WHERE,子句,该字段下的所有字段值都将被新值替换。,2026/10/25,26,4.3.2 UPDATE,命令(续),【例,4.12,】把第,1,章中创建的,SJ,表中“价格”大于,30,元且“页数”大于,300,的图书的“备注”改为“珍贵图书”,,SQL,命令如下:,UPDATE SJ SET BZ=,珍贵图书,WHERE JG30 AND YS300,若把价格大于,30,元的或页数大于,300,页的图书的备注(,bz,),改为珍贵图书,,SQL,命令如下:,UPDATE SJ SET BZ=,珍贵图书,WHERE JG30 OR YS300,2026/10/25,27,4.3.3 DELETE,命令,DELETE,命令用来删除一行或者多行记录。,命令格式:,DELETE FROM WHERE,命令说明:,FROM,子句:指出将删除的目标表。,WHERE,:指明被删除的记录满足的条件,若没有,WHERE,子句则删除所有记录。,【,例4.13,】,在第1章创建的,SJ,表中,把“价格”大于30元且“页数”大于300的图书记录删掉,,SQL,语句如下:,DELETE FROM SJ WHERE JG30 AND YS300,2026/10/25,28,4.4,查询和,SELECT,命令,SELECT,是数据查询命令。,SELECT,命令虽然属于数据操纵范围,但它是,SQL,的核心,在,SQL,命令中使用的是最多的,我们将它和查询单独作为一节。,VFP,6.0,的查询设计器或,SELECT-SQL,语句可用来方便地检索存储在表或者视图中的信息。,利用查询设计器可以搜索满足条件的记录,并且可将查询保存在,.,qpr,文件中。,2026/10/25,29,4.4.1,创建和添加查询,1,启动查询设计器,若要打开查询设计器,应首先打开一个要查询的数据库,然后采用以下方式之一:,(,1,)“文件”菜单启动查询设计器,(,2,)从“工具”菜单启动查询设计器,(,3,)使用,CREATE QUERY,命令打开查询设计器,2026/10/25,30,(1)“文件”菜单启动查询设计器,从“文件”菜单中选择“打开”命令,启动“打开”对话框,并在对话框的“文件类型”中选择“项目”类型,再选取要打开的项目名称,最后单击“确定”按钮,出现项目管理器对话框。,在项目管理器中选择“数据”选项卡,再选取“查询”选项。,单击“新建”按钮,此时出现“添加表或视图”对话框,然后从数据库下拉列表框中选择待查询的数据库名称。再从“选定”栏中选择“表”或“视图”,本例选择了“表”。,从“数据库中的表”列表框中选择要添加的表。重复这一步骤,直到选取了所需要的全部表。,单击“关闭”按钮,返回“查询设计器”窗口,如图4-8所示。,2026/10/25,31,(1)“文件”菜单启动查询设计器(续),图,4-8,查询设计器,2026/10/25,32,(2)从“工具”菜单启动查询设计器,在,VFP,6.0,主菜单中,选择“工具”,指向“向导”,选择“查询”,弹出“向导选取”对话框,再选择“查询向导”,可根据查询向导的提示创建查询。,(3)使用,CREATE QUERY,命令打开查询设计器,在命令窗口中输入,CREATE QUERY,即可打开查询设计器。,2026/10/25,33,2,创建查询,(,1,)查询设计器,查询设计器的窗口如图,4-8,所示。,在查询设计器上半部分的窗口中,列出用户已选定的要查询的表或视图。,表或视图之间的连线表示表之间的连接关系。,查询设计器下半部分的窗口中有6个选项卡:,“,字段”:选定包含在查询结果中的字段。,“,联接”:确定各数据表或视图之间的连接关系。,“,筛选”:相当于命令,SET FILTER TO,,,利用过滤的方法查找一个特定的数据子集。,“,排序依据”:决定查询结果输出中记录或行的排列顺序,“,分组依据”:所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组的计算。,“杂项”:指定是否要对重复记录进行检索,同时是否对记录(返回记录的最大数目或最大百分比)做限制。,2026/10/25,34,(2)创建查询的步骤,1,)按上面介绍的方法打开查询设计器。,2,)添加出现在查询结果中的表或视图。如本例已打开“图书馆管理”数据库,并已选择添加了,Dz.dbf,、,Jy.dbf,和,Sj.dbf,三个表。,3,)选定要包含在查询结果中的字段。在“字段”选项卡中,从可用字段列表框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。,4,)如果要“可用字段”列表框中的全部字段都包含在查询结果中,可单击“全部添加”按钮;单击“全部移去”按钮,则将已选定的字段(列于选定字段列表框中)全部作废。此时单击“运行”按钮即可看到查询结果。,5,)保存查询。从“文件”菜单中选择“保存”命令,打开如图,4-9,所示的“另存为”对话框中,在“保存类型”下拉框中选择“查询”类型,在“保存文档为:”文本框中输入查询文件名,本例取名为“读者借阅”,然后单击“保存”按钮即可。,2026/10/25,35,(2)创建查询的步骤(续),图,4-9,“另存为”对话框,2026/10/25,36,(2)创建查询的步骤(续),【例,4.14,】查询书籍表中的部分信息。,将,Sj.dbf,表添加到查询设计器中,即只对,Sj.dbf,表操作。操作如下:,1,)首先打开“图书馆管理”数据库,然后打开查询设计器,添加表,Sj.dbf,。,2,),选定要包含在查询结果中的字段。方法是在“字段”选项卡中,从可用字段列表框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。图,4-10,列出了本例选择的全部字段。,3,)单击“运行”按钮得到查询结果,如图,4-11,所示。,2026/10/25,37,(2)创建查询的步骤(续),4,)保存查询结果。单击“文件”菜单的“保存”命令,打开“保存”对话框,将查询结果保存。,图,4-10,例,4.14,图,图,4-11,例,4.14,的查询结果,2026/10/25,38,(2)创建查询的步骤(续),【例,4.15,】统计表,Sj.dbf,中记录书籍的价格、页数和书名等信息。,为完成统计所有书籍的价格和页数的查询,应将,Sj.dbf,表添加到查询设计器中。,由于本例只要求统计所有书籍的价格和页数,因此只需要选择书籍名称、价格和页数三个字段即可。,选择所需的字段后,单击“查询”按钮即可看到查询结果,如图,4-12,所示。,图,4-12,例,4.15,的“书籍价格”,查询结果,2026/10/25,39,3,创建,SELECT-SQL,语句,(,1,)认识,SELECT-SQL,语句,利用查询设计器可以方便地创建查询,而,SELECT-SQL,则是一个功能更强大的查询工具,它可直接从一个或多个表中检索数据,其查询结果可用于创建报表、,BROWSE,或新的数据库表或是临时表,并且,SELECT-SQL,语句可直接加入到程序中。,利用查询设计器创建查询时,系统会自动创建相应的,SQL,查询语句。,单击“查询设计器工具栏”上的“显示,SQL,窗口”按钮,如图4-13所示,可打开,SQL,窗口,窗口中所列出的语句就是刚刚利用查询设计器创建的与查询相对应的,SQL,语句。,2026/10/25,40,3,创建,SELECT-SQL,语句(续),表,4-3,所列是上两例使用查询设计器创建查询得到的,SQL,语句。,在命令窗口中键入,MODIFY COMMAND example,命令,打开程序编辑窗口,再输入下述命令,可得到与使用查询设计器相同的查询结果。,1,)在命令窗口中输入任一,SELECT-SQL,语句,然后按,Ctrl+W,键保存所输入的内容。,2,),DO example,例4.14的,SELECT SQL,语句,例4.15的,SELECT SQL,语句,SELECT sj.sjbh,sj.sjmc,sj.sjzz,sj.cbs;,FROM,图书馆管理!,sj,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理!,sj,表,4-3,查询设计器创建的,SELECT SQL,语句,图,4-13,查询设计器,工具栏,2026/10/25,41,(2),SELECT-SQL,语句的语法格式,SELECT ALL|DISTINCT TOP nExpr PERCENT,Alias.Select_Item AS Column_Name,Alias.Select_Item AS Column_Name.,FROM FORCE,DatabaseName!Table AS Local_Alias,INNER|LEFT OUTER|RIGHT OUTER|FULL OUTER JOIN,DatabaseName!Table AS Local_Alias,ON JoinCondition,INTO Destination|TO FILE FileName ADDITIVE|TO PRINTER PROMPT,|TO SCREEN,PREFERENCE PreferenceName,NOCONSOLE,PLAIN,NOWAIT,WHERE JoinCondition AND JoinCondition.,AND|OR FilterCondition AND|OR FilterCondition.,GROUP BY GroupColumn,GroupColumn.,HAVING FilterCondition,UNION ALL SELECTCommand,ORDER BY Order_Item ASC|DESC,Order_Item ASC|DESC.,2026/10/25,42,(2),SELECT-SQL,语句的语法格式(续),SELECT-SQL,语句相当复杂,它既可以用于单表的查询,也可以用于多表的查询。,1,),SELECT,子句:在,SELECT,子句中指定在查询结果中包含的字段、表达式。,2,),FROM,子句:指定所有从中检索数据的表。如果表没有打开,,VFP,6.0,显示“打开”对话框,以便指定文件位置。表打开以后,直到查询结束时才关闭。,如果包含,FORCE,关键字,则在建立查询时会严格按照,FROM,子句中描述的顺序连接表;若不包含,FORCE,关键字,则对查询进行优化。使用,FORCE,关键字,可加快查询速度。,DatabaseName!,用来指定数据的名称。当包含表的数据库不是当前数据库时,必须指定数据库名称,并且应在数据库名称之后表名之前加上感叹号(!)分隔符。,例如,“图书馆管理!,sj”,表示数据管理数据库的,sj,表。,2026/10/25,43,(2),SELECT-SQL,语句的语法格式(续),【例,4-16,】对图书馆管理数据库,使用,FROM,子句,查看所有读者的编号、姓名和性别。,其中,,SELECT,子句指定要查询的字段名称,,dz.dzbh,、,dz.dzxm,和,dz.dzxb,分别对应,dz,表中的编号、姓名和性别。,FROM,子句表示要查询的字段来自“图书馆管理”数据库的,dz,表。,SELECT dz.dzbh,dz.dzxm,dz.dzxb;,FROM dz,注意:,下面的,SELECT,语句和上面的语句具有相同的效果:,SELECT dz.dzbh,dz.dzxm,dz.dzxb;,FROM,图书馆管理,!,dz,2026/10/25,44,4.,定义查询结果,(,1,)使用排序选项,排序能决定查询输出结果中记录或行的顺序。,例如,可按书籍的价格以升序或降序方式对书籍记录进行排序。,利用排序依据选项卡可设置查询的排序次序。,在“排序依据”选项卡中,“选定字段”可选择要用来排序的关键字段。选定后,添加到“排序条件”框,“排序条件”框中字段的次序决定了查询结果排序时的条件,第一个字段决定了主排序次序,其余字段决定了第二排序次序。,例如,在“排序条件”框中的字段顺序是,sj.jg,、,sj.ys,,,则查询结果将首先按,sj.jg,进行排序,如果,sj,表中有一个以上的记录具有同样的,jg,字段值,这些记录则再按,ys,进行排序。,2026/10/25,45,4.,定义查询结果(续),【例,4.17,】建立查询按书籍价格从低到高排序。,观察例,4.15,的查询结果,可以发现其结果并没有完全按书籍价格的高低输出,若要使输出按书籍价格从低到高排列,可按以下步骤操作:,1,)打开查询设计器,首先选择“排序依据”选项卡。其中,“选定字段”列出了可用来排序的字段,供用户选择,“排序条件”是用户已选择好的用来排序的字段。,2,)从“选定字段”框中选定用来排序的字段,由于本例要按书籍价格从小到大的顺序排序,所以应选择字段,sj.jg,,,然后单击“添加”按钮,把它移到“排序条件”框中。,3,)从“排序选项”的两个单选按钮“升序”和“降序”中选择一个,本例选择“升序”。,4,)单击常用工具栏中的“运行”按钮。将查询结果同例,4.15,比较。,2026/10/25,46,4.,定义查询结果(续),对查询结果进行排序时,在对应的,SELECT-SQL,命令中可包括,ORDER BY,子句,它的格式如下:,ORDER BY Order_itemASC|DESC,其中,,Order_item,是排序条件框中选定的排序字段,字段间用逗号(,)分隔。另外,,Order_item,也可以是一个数字表达式,表示查询结果中列的位置(最左边列的编号为1)。,ASC,指定查询结果根据排序以升序排序,,DESC,指定以降序排列,缺省时为升序。,如果不使用,ORDER BY,子句指定查询结果的排列顺序,则查询结果不排序。,例4.17对应的,SELECT-SQL,语句如下:,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理!,sj ORDER BY sj.jg,2026/10/25,47,(2)给字段添加说明标题,为使查询结果易于阅读和理解,可以给字段添加说明标题,又称别名。,给前面设计的“书籍价格”添加说明标题,操作步骤如下:,1,)打开“书籍价格”查询。,2,)在“函数和表达式”文本框中键入字段名,接着输入,AS,和说明标题,如下所示:,sj.sjmc AS,书籍名称,3)单击“添加”按钮,在“选定字段”框中放置带有别名的字段。,4)重复步骤2)、3),分别给,sj.jg,和,sj.ys,添加说明标题“书籍价格”和“书籍页数”。,5)单击“运行”按钮,查询结果中各字段名称已变成相应的汉字说明。,对应的,SELECT,语句如下:,SELECT sj.sjbh AS,书籍编号,sj.jg AS,书籍价格,sj.ys AS,书籍页数;,FROM,图书馆管理!,sj,2026/10/25,48,(3)使用选择条件,选择数据库或表中符合条件的一部分记录而不是全部记录是查询的重要任务。,例如,要查询一定日期范围内的借书记录、查询所有女性读者的基本情况等。,在查询设计器中,“筛选”选项卡可确定用于选择记录的字段和比较准则,以及输入与该字段进行比较的示例值。,设置筛选条件是指设置筛选的逻辑表达式,这个表达式由字段、操作符和数值组成。逻辑表达式主要有下述形式:,字段 操作符 表达式,其中,字段是要查询的表中的字段。操作符的含义及使用示例如表4-4所示。,2026/10/25,49,(3)使用选择条件(续),在表,4-4,中,,Like,筛选操作符的含义是查找每个与字符表达式相匹配的字段。在字符串表达式中可使用百分号“,%,”和下划线“,_,”通配符,下划线表示字符串中的任意一个字符,百分号表示任意长度的字符串。,操作符,比较关系,举例,=,相等,xk.cj=60,,,xk.kcbm=02,=,完全相等,xk.cj=60,,,xk.kcbm=02,Like,不精确匹配,xk.xh LIKE 19964%,,,查询所有学号前五位是“,19964,”的学生,大于,xk.cj 60,,,xk.kcbm 02,=,大于等于,xk.cj=60,,,xk.kcbm=02,小于,xk.cj 60,,,xk.kcbm 02,=,小于等于,xk.cj=60,,,xk.kcbm=30,,选择“否”按钮后,变为,sj.jg=,操作符。,4,)在“实例”文本框中输入,30,。,对应的,SELECT,语句如下:,SELECT sj.sjmc AS,书籍名称,sj.jg AS,书籍价格,sj.ys AS,书籍页数,;,FROM,图书馆管理,!,sj;,WHERE sj.jg=30,2026/10/25,52,(3)使用选择条件(续),【例,4.19,】在例,4.15,创建的“书籍价格”查询中,使用,LIKE,操作符,筛选出书籍名为软件工程的记录。,1,)打开“统计学生成绩”查询,并选择“筛选”选项卡。,2,)在“字段”下拉列表中选择,sj.sjmc,字段。,3,)在“条件”下拉列表中选择,LIKE,操作符。,4,)在“实例”文本框中输入“软件工程”。,对应的,SELECT,语句如下:,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理,!,sj WHERE sj.sjmc LIKE,软件工程,2026/10/25,53,(4)多个筛选条件的组合使用,实际使用中,经常需要查询某一范围内的记录。,例如,书籍价格在,30,元以下或者,50,元以上的所有书籍,或者书籍页数在,300,页以上且价格在,40,元以上的书籍等。,由于可能同时需要输入两个筛选条件,因此需要考虑筛选条件之间的关系问题。,在,VFP,中,筛选条件间共有三种关系,即与(,and)、,或(,or),和否(,not)。,例如,“书籍价格在30元以下或者50元以上”可写成,sj.jg=50,,而“书籍页数在300页以上且价格在40元以上的书籍”可写成,sj.ys=300 and sj.jg=40。,在“筛选”选项卡中,可同时输入多个筛选条件,每一个筛选条件占一行,行与行之间的缺省逻辑关系是“与”(,AND),,当选择其他关系时,可通过逻辑项对应行的列表来选择。,2026/10/25,54,(4)多个筛选条件的组合使用(续),【例,4.20,】设置“与”筛选条件。前面已经分析过,“书籍页数在,300,页以上且价格在,40,元以上的书籍”,可看成两个筛选条件的组合,即,sj.ys=300 and sj.jg=40,。,首先建立筛选条件,sj.ys=300,,,然后再建立另一个筛选条件,sj.jg=40,。,由于两个筛选条件之间是“与”的关系,因此不用设置“逻辑”选项。,对应的,SELECT,语句如下:,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理,!,sj WHERE sj.ys=300 and sj.jg=40,2026/10/25,55,(4)多个筛选条件的组合使用(续),【例,4.21,】设置“或”(,OR,),筛选条件。统计“书籍价格在,30,元以下或者,50,元以上”的所有书籍,其筛选条件可写成,sj.jg=50,。,在“筛选”选项卡中首先建立两个筛选条件,第一个是,sj.jg=50,。,由于两个筛选条件是“或”关系,因此,还要在第一个筛选条件对应的“逻辑”下拉列表中选择,OR,运算符。,对应的,SELECT,语句如下:,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理,!,sj WHERE sj.jg=50,2026/10/25,56,(4)多个筛选条件的组合使用(续),【例,4.22,】设置“非”(,NOT,),筛选条件。查询“所有书名不是软件工程的书籍”。,考察“所有书名不是软件工程的书籍”和“所有书名是软件工程的书籍”是互为否定的。,“所有书名是软件工程的书籍”可写成“,LIKE”,软件工程“”,可先设置筛选条件“,LIKE”,软件工程“”,然后单击该筛选条件行对应的“否”按钮。,对应的,SELECT,语句是:,SELECT sj.sjmc,sj.jg,sj.ys;,FROM,图书馆管理!,sj WHERE sj.sjmc NOT like,软件工程,2026/10/25,57,5,定向输出查询结果,VFP,允许查询结果以不同的形式输出。,例如,可输出到文件、打印机、临时表和屏幕等。缺省形式是将查询结果显示在浏览窗口中。,选择查询结果输出形式的方法是:,(1)从“查询”菜单中选择“查询去向”命令,打开“查询去向”对话框,如图4-14所示。打开该对话框的另一个方法是在“查询设计器”工具栏中单击“查询去向”按钮。,(,2,)“查询去向”对话框中列出了,7,个查询结果的输出形式,且均以按钮形式给出。选择需要的按钮,并单击“确定”按钮即可。,图,4-14,“查询去向”对话框,2026/10/25,58,5,定向输出查询结果(续),定向输出对应的,SELECT,子句是,INTO Destination,子句。表4-5为该子句常用格式。,如输出到临时表“学生成绩清单”中可写成“,INTO CURSOR,学生成绩清单”,输出到活动窗口中,可写成,TO SCREEN。,如果只想暂时保存结果,可将它们发送到数组或临时表中。,若要永久保存结果,将它发送到一个表中。,查询结果输出形式,SELECT,子句格式,独立的表,INTO TABLE,表名称,数组,INTO ARRAY,数组名称,临时表,INTO CURSOR,临时表名称,活动窗口,TO SCREEN,浏览窗口,系统缺省值,表,4-5,定向输出查询结果子句形式,2026/10/25,59,4.4.2,运行查询,1,运行查询,在完成了查询设计并指定了输出目的地后,可以单击“运行”按钮启动该查询,也可以在命令窗口使用,DO,命令。,例如,运行“数籍价格”查询,可在命令窗口输入:,DO,书籍价
展开阅读全文