第4章结构化查询语言SQL和报表课件_第1页
第4章结构化查询语言SQL和报表课件_第2页
第4章结构化查询语言SQL和报表课件_第3页
第4章结构化查询语言SQL和报表课件_第4页
第4章结构化查询语言SQL和报表课件_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 结构化查询语言SQL和报表SQL语言的基本概述数据定义语言DDL数据操纵语言DML查询和SELECT 命令报表和标签小结2022/10/21第4章 结构化查询语言SQL和报表SQL语言的基本概述204.1 SQL语言的基本概述结构化查询语言(Structured Query Language,简称SQL)SQL是用于对存放在计算机数据库中的数据进行组织、管理和检索的工具,是一种用于和数据库进行交互通信的计算机语言。SQL是1974年由Boyce和Chamberlin提出的,并在IBM公司研制的System R上首次实现了这种语言,由于它的功能丰富,使用方式灵活和语言简洁易学等突出特点,

2、很受计算机界的欢迎。现在SQL语言已成为关系型数据库操纵语言的国际标准。 VFP 提供了SQL 语言支持 2022/10/224.1 SQL语言的基本概述结构化查询语言(Structu4.1.1 SQL语言的基本概念SQL语言支持关系型数据库的三级模式结构,其中外模式对应于视图和部分基本表,模式对应于基本表,内模式对应于存储文件。在SQL语言中,一个关系就对应于一个表,基本表本身是独立存在的表,对应一个存储文件;存储文件的逻辑结构组成了关系型数据库的内模式。视图是从基本表或其他视图导出的表,视图只是一个虚表。 在用户看来,视图和基本表都是关系,而存储文件对用户是透明的。 2022/10/234

3、.1.1 SQL语言的基本概念SQL语言支持关系型数据库4.1.2 SQL的基本功能SQL语言由3部分组成:数据定义语言DDL(Date Definition Language)。数据操纵语言DML(Date Manipulation Language)。数据控制语言DCL(Date Control Language)。其主要命令如表4-1所示。SQL功能命令数据定义语言DDLCreate、Drop、Alter数据操纵语言DMLSelect、Insert、Update、Delete数据控制语言DCLGrant、Revoke其中,数据定义语言DDL提供了完整的定义数据库所必需的语言工具,用来创建

4、、修改、删除数据库对象;数据操纵语言DML用于查询或者修改数据;数据控制语言DCL用来管理用户的访问权限,由于VFP 没有权限管理功能,所以不支持DCL命令。 2022/10/244.1.2 SQL的基本功能SQL语言由3部分组成:SQL4.2 数据定义语言DDL数据定义语言是对关系模式的一级定义,用来定义被存放数据的结构和组织,以及数据项之间的关系。SQL数据定义语言可以用来定义数据表、视图和索引。Create语句:用于定义和生成数据对象,比如创建表、视图和索引。Drop语句:用于删除一个现有的数据对象,比如视图、表、索引。Alter语句:用于改变一个数据库对象。比如对一个表的字段进行删除、

5、添加和修改,或者修改表的结构。2022/10/254.2 数据定义语言DDL数据定义语言是对关系模式的一级定4.2.1 用Create语句创建基本表命令格式:CREATE TABLE 表名 FREE ( (宽度, 小数) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY /UNIQUE , ) 命令功能:创建数据表的结构。 2022/10/264.2.1 用Create语句创建基本表命令格式:20224.2.1 用Create语句创建基本表(续)命令说明:CREATE TABLE表名:指定创建表文件名。FREE:在数据库打开的情况下创建的是自由表。默认在数

6、据库未打开时创建的是自由表,在数据库打开时创建的是数据库表。CHECK:为字段值指定约束条件;ERROR:用来指定当不满足约束条件时显示的出错信息。DFAULT:指定默认的字段值。PRIMARY KEY:指定当前字段为主索引关键字;UNIQUE:指定当前字段为候选索引关键字。NULL/NOT NULL:表示该字段是否可以为空。 2022/10/274.2.1 用Create语句创建基本表(续)命令说明:24.2.1 用Create语句创建基本表(续)【例4.1】在图书馆管理系统中创建dzzl(读者种类)表,包含zlbh(种类编号)、zlmc(种类名称)、jssl(借书数量)、jsqx(借书期限

7、)、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表结构2022/10/284.2.1 用Create语句创建基本表(续)【例4.1】4.2.1 用Create语句创建基本表(续)【例4.2】创建一个名为“通讯录”的自由表,包含姓名、工作单位、电话号码、家庭住址4个

8、字段,所得的表预览如图4-3所示。CREATE TABLE 通讯录 FREE(姓名C(10),工作单位C(20), 电话号码C(12), 家庭住址C(20)BROWSE由于没有向表中添加任何记录,所以在预览时看不见任何的记录。图4-3 创建的通讯录表2022/10/294.2.1 用Create语句创建基本表(续)【例4.2】4.2.1 用Create语句创建基本表(续)【例4.3】创建一个“图书订单”的数据库,并在此数据库中创建一个“图书”表,图书表含有订单号、图书编号、书名、单价、数量等字段。CREATE DATEBASE 图书订单CREATE TABLE 图书( 订单号 C(10);DE

9、FAULT 10001, 图书编号 C(10) PRIMARY KEY,;书名C(10), 单价 N(8, 2);数量 N(6) CHECK 数量=100 AND 数量=1000;ERROR 数量范围在100和1000之间)图4-4 图书表的索引图预览此表的设计器可以看见“图书编号”已经被设为主索引,如图4-4所示。 2022/10/2104.2.1 用Create语句创建基本表(续)【例4.3】4.2.1 用Create语句创建基本表(续)【例4.4】在图书订单数据库中建立一个新表“订单”表,含有订单编号、图书编号、客户编号、订货日期、发货日期几个字段。OPEN DATABASE 图书订单C

10、REATE TABLE 订单( 订单编号 C(10) PRIMARY KEY,; 客户编号 C(10), 订货日期 D, 发货日期D;图书编号C(10), FOREIGN KEY 图书编号;TAG 图书编号 REFERENCES 图书) 图4-5 图书表和订单表之间的关系在命令窗口中输入“MODIFY DATABASE 订数订单”命令,可在弹出的“数据库设计器”窗口中见到图书表和订单表之间已建立的关系,如图4-5所示。 2022/10/2114.2.1 用Create语句创建基本表(续)【例4.4】4.2.2 用Alter修改基本表命令格式1:ALTER TABLE ADD/ALTERCOLU

11、MN (字段宽度,小数位数) NULLNOT NULL CHECKERROR DEFAULT PRIMARY KEY/UNIQUE REFERENCESTAG 命令功能:修改表中原有的字段,或者在表中增加新的字段。2022/10/2124.2.2 用Alter修改基本表命令格式1:2022/94.2.2 用Alter修改基本表(续)命令说明:ADD COLUMN(字段宽度,小数位数):增加新字段,并指定新增字段的名称、类型、字段宽度及小数位数。NULLNOT NULL:指定新字段是否接受空值。ALTER COLUMN (字段宽度,小数位数):修改原有字段,并指定修改后的字段名称、类型、字段宽度

12、及小数位数。其他的参数含义同 CREATE TABLE。2022/10/2134.2.2 用Alter修改基本表(续)命令说明:20224.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

13、修改后的通讯录表2022/10/2144.2.2 用Alter修改基本表(续)【例4.5】修改在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 CHECKERROR SET DEFAULT DROP CHECK DROP DEFAULT 2022/10/2154.2.2 用Alter修改基本表(续)【

14、例4.6】修改例4.2.2 用Alter修改基本表(续)命令功能:删除或者设置字段的默认值或约束条件。命令说明: SET CHECKERROR:为字段设置约束条件。SET DEFAULT:设置默认值。DROP DEFAULT:删除默认值。 DROP CHECK:删除约束条件。 2022/10/2164.2.2 用Alter修改基本表(续)命令功能:删除或者4.2.2 用Alter修改基本表(续)【例4.7】在例4.3创建的图书表中,为“图书编号”字段设置一个默认值200601并删除数量的约束条件,SQL命令如下:ALTER TABLE 图书 ALTER 图书编号 SET DEFAULT 200

15、601ALTER TABLE 图书 ALTER 数量 DROP CHECK2022/10/2174.2.2 用Alter修改基本表(续)【例4.7】在例44.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 KEYTAGREFERENCESTAG DROP FOREIGN KEY TAG SAVE RENAME COLUMN TO 202

16、2/10/2184.2.2 用Alter修改基本表(续)命令格式3:2024.2.2 用Alter修改基本表(续)命令功能:删除表中的字段、设置或删除表的主索引、候选索引、对字段重新命名或者删除指定的字段的约束条件。命令说明:DROP COLUMN:删除指定的字段。ADD PRIMARY KEY TAG:建立主索引。DROP PRIMARY KEY:删除主索引。ADD UNIQUE TAG :建立候选索引。DROP UNIQUE TAG:删除候选索引。ADD FOREIGN KEYTAG:建立外索引。REFERENCESTAG:指定建立关联的父表。 DROP FOREIGN KEY TAG S

17、AVE:删除外索引。RENAME COLUMN TO:对字段重新命名。 2022/10/2194.2.2 用Alter修改基本表(续)命令功能:删除表中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中,字段“数量”被删除,并创建候选索引“书名”。 2022/10/2204.2.2 用Alter修改基本表(续)【例4.8】在例44.2.2

18、用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 2022/10/2214.2.2 用Alter修改基本表(续)【例4.9】在第14.2.3 用DROP 命令删除一个表随着数据库设计的变化,数据库的结构也在不断的变化,新建的表就会不断地代替旧表,这时某些旧表就不再需要了,可

19、以用DROP TABLE 命令删除它。命令格式:DROP TABLE 命令功能:删除一个表,包括在这个表上建立的索引。命令说明:指定被删除的表。【例4.10】删除在例4.2中创建的通讯录表,SQL 命令如下:DROP TABLE 通讯录 2022/10/2224.2.3 用DROP 命令删除一个表随着数据库设计的变化4.3 数据操纵语言DML数据操纵实际上就是管理数据,这也是创建表的基本目的,主要是对关系中的具体数据进行查询、更新、删除和插入,但不能够改变数据的结构。DML命令如表4-2所示。命令功能UPDATE更新数据库中的已有数据DELETE 用于从数据表中删除数据INSERT增加一个新的

20、数据到表中SELECT 数据查询表4-2 DML的命令及功能2022/10/2234.3 数据操纵语言DML数据操纵实际上就是管理数据,这也4.3.1 INSERT 命令用CREATE TABLE 命令创建一个表后,创建的表中没有具体的数据,可以用INSERT命令向表中插入数据。命令格式:INSERT INTO 表名 (列名1, 列名2, )VALUES( , ,)命令说明:INTO 表名:指定接受新数据的目标表。VALUES:指明增加记录的字段值。向表中添加的数据必须与指定字段名的类型相匹配。字符串要用单引号或者双引号括起来,日期型可用CTOD函数处理或者直接引用。2022/10/2244.

21、3.1 INSERT 命令用CREATE TABLE 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) 2022/10/2254.3.1 INSERT 命令(续)

22、【例4.11】在例4.4.3.2 UPDATE命令UPDATE语句用来更新表中的记录。 命令格式:UPDATE SET =,=WHERE 命令说明:UPDATE:指明要修改的记录的表的名称。SET:指明更新的字段名和字段值。WHERE:限定要修改的行,如果没有WHERE子句,该字段下的所有字段值都将被新值替换。2022/10/2264.3.2 UPDATE命令UPDATE语句用来更新表中的4.3.2 UPDATE命令(续)【例4.12】把第1章中创建的SJ表中“价格”大于30元且“页数”大于300的图书的“备注”改为“珍贵图书”,SQL命令如下:UPDATE SJ SET BZ=珍贵图书 WH

23、ERE JG30 AND YS300若把价格大于30元的或页数大于300页的图书的备注(bz)改为珍贵图书,SQL命令如下:UPDATE SJ SET BZ=珍贵图书 WHERE JG30 OR YS300 2022/10/2274.3.2 UPDATE命令(续)【例4.12】把第1章中4.3.3 DELETE 命令DELETE 命令用来删除一行或者多行记录。命令格式:DELETE FROM WHERE 命令说明:FROM 子句:指出将删除的目标表。WHERE :指明被删除的记录满足的条件,若没有WHERE子句则删除所有记录。【例4.13】在第1章创建的SJ表中,把“价格”大于30元且“页数”

24、大于300的图书记录删掉,SQL语句如下:DELETE FROM SJ WHERE JG30 AND YS300 2022/10/2284.3.3 DELETE 命令DELETE 命令用来删除一4.4 查询和SELECT 命令SELECT 是数据查询命令。SELECT命令虽然属于数据操纵范围,但它是SQL的核心,在SQL命令中使用的是最多的,我们将它和查询单独作为一节。VFP 6.0的查询设计器或SELECT-SQL语句可用来方便地检索存储在表或者视图中的信息。利用查询设计器可以搜索满足条件的记录,并且可将查询保存在.qpr文件中。2022/10/2294.4 查询和SELECT 命令SELE

25、CT 是数据查询命4.4.1 创建和添加查询1启动查询设计器若要打开查询设计器,应首先打开一个要查询的数据库,然后采用以下方式之一:(1)“文件”菜单启动查询设计器(2)从“工具”菜单启动查询设计器(3)使用CREATE QUERY命令打开查询设计器2022/10/2304.4.1 创建和添加查询1启动查询设计器2022/9/(1)“文件”菜单启动查询设计器从“文件”菜单中选择“打开”命令,启动“打开”对话框,并在对话框的“文件类型”中选择“项目”类型,再选取要打开的项目名称,最后单击“确定”按钮,出现项目管理器对话框。在项目管理器中选择“数据”选项卡,再选取“查询”选项。单击“新建”按钮,此

26、时出现“添加表或视图”对话框,然后从数据库下拉列表框中选择待查询的数据库名称。再从“选定”栏中选择“表”或“视图”,本例选择了“表”。从“数据库中的表”列表框中选择要添加的表。重复这一步骤,直到选取了所需要的全部表。单击“关闭”按钮,返回“查询设计器”窗口,如图4-8所示。2022/10/231(1)“文件”菜单启动查询设计器从“文件”菜单中选择“打开”(1)“文件”菜单启动查询设计器(续)图4-8 查询设计器2022/10/232(1)“文件”菜单启动查询设计器(续)图4-8 查询设计器(2)从“工具”菜单启动查询设计器在VFP 6.0主菜单中,选择“工具”,指向“向导”,选择“查询”,弹出

27、“向导选取”对话框,再选择“查询向导”,可根据查询向导的提示创建查询。(3)使用CREATE QUERY命令打开查询设计器在命令窗口中输入CREATE QUERY即可打开查询设计器。2022/10/233(2)从“工具”菜单启动查询设计器在VFP 6.0主菜单中,2创建查询(1)查询设计器查询设计器的窗口如图4-8所示。在查询设计器上半部分的窗口中,列出用户已选定的要查询的表或视图。表或视图之间的连线表示表之间的连接关系。查询设计器下半部分的窗口中有6个选项卡:“字段”:选定包含在查询结果中的字段。“联接”:确定各数据表或视图之间的连接关系。“筛选”:相当于命令SET FILTER TO,利用

28、过滤的方法查找一个特定的数据子集。“排序依据”:决定查询结果输出中记录或行的排列顺序“分组依据”:所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组的计算。“杂项”:指定是否要对重复记录进行检索,同时是否对记录(返回记录的最大数目或最大百分比)做限制。 2022/10/2342创建查询(1)查询设计器2022/9/2434(2)创建查询的步骤1)按上面介绍的方法打开查询设计器。2)添加出现在查询结果中的表或视图。如本例已打开“图书馆管理”数据库,并已选择添加了Dz.dbf、Jy.dbf和Sj.dbf三个表。3)选定要包含在查询结果中的字段。在“字段”选项卡中,从可用字段列表

29、框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。4)如果要“可用字段”列表框中的全部字段都包含在查询结果中,可单击“全部添加”按钮;单击“全部移去”按钮,则将已选定的字段(列于选定字段列表框中)全部作废。此时单击“运行”按钮即可看到查询结果。5)保存查询。从“文件”菜单中选择“保存”命令,打开如图4-9所示的“另存为”对话框中,在“保存类型”下拉框中选择“查询”类型,在“保存文档为:”文本框中输入查询文件名,本例取名为“读者借阅”,然后单击“保存”按钮即可。 2022/10/235(2)创建查询的步骤1)按上面介绍的方法打开查询设计器。20(2)创建查询的步骤(续

30、)图4-9 “另存为”对话框2022/10/236(2)创建查询的步骤(续)图4-9 “另存为”对话框202(2)创建查询的步骤(续)【例4.14】查询书籍表中的部分信息。将Sj.dbf表添加到查询设计器中,即只对Sj.dbf表操作。操作如下:1)首先打开“图书馆管理”数据库,然后打开查询设计器,添加表Sj.dbf。2)选定要包含在查询结果中的字段。方法是在“字段”选项卡中,从可用字段列表框中选择需要的字段,即单击需要的字段,再单击“添加”按钮;或者双击需要的字段。图4-10列出了本例选择的全部字段。3)单击“运行”按钮得到查询结果,如图4-11所示。 2022/10/237(2)创建查询的步

31、骤(续)【例4.14】查询书籍表中的部分信(2)创建查询的步骤(续)4)保存查询结果。单击“文件”菜单的“保存”命令,打开“保存”对话框,将查询结果保存。 图4-10 例4.14图图4-11 例4.14的查询结果2022/10/238(2)创建查询的步骤(续)4)保存查询结果。单击“文件”菜单(2)创建查询的步骤(续)【例4.15】统计表Sj.dbf中记录书籍的价格、页数和书名等信息。为完成统计所有书籍的价格和页数的查询,应将Sj.dbf表添加到查询设计器中。由于本例只要求统计所有书籍的价格和页数,因此只需要选择书籍名称、价格和页数三个字段即可。选择所需的字段后,单击“查询”按钮即可看到查询结

32、果,如图4-12所示。图4-12 例4.15 的“书籍价格”查询结果2022/10/239(2)创建查询的步骤(续)【例4.15】统计表Sj.dbf中3创建SELECT-SQL语句(1)认识SELECT-SQL语句利用查询设计器可以方便地创建查询而SELECT-SQL则是一个功能更强大的查询工具,它可直接从一个或多个表中检索数据,其查询结果可用于创建报表、BROWSE或新的数据库表或是临时表,并且SELECT-SQL语句可直接加入到程序中。利用查询设计器创建查询时,系统会自动创建相应的SQL查询语句。单击“查询设计器工具栏”上的“显示SQL窗口”按钮,如图4-13所示,可打开SQL窗口,窗口中

33、所列出的语句就是刚刚利用查询设计器创建的与查询相对应的SQL语句。 2022/10/2403创建SELECT-SQL语句(1)认识SELECT-SQ3创建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,

34、sj.sjmc, sj.sjzz, sj.cbs; FROM 图书馆管理!sjSELECT sj.sjmc, sj.jg, sj.ys; FROM 图书馆管理!sj表4-3 查询设计器创建的SELECT SQL语句图4-13 查询设计器工具栏2022/10/2413创建SELECT-SQL语句(续)表4-3所列是上两例使(2)SELECT-SQL语句的语法格式SELECT ALL | DISTINCT TOP nExpr PERCENTAlias. Select_Item AS Column_Name, Alias. Select_Item AS Column_Name .FROM FORCE

35、DatabaseName!Table AS Local_AliasINNER | LEFT OUTER | RIGHT OUTER | FULL OUTER JOIN DatabaseName!Table AS Local_Alias ON JoinCondition INTO Destination | TO FILE FileName ADDITIVE | TO PRINTER PROMPT | TO SCREENPREFERENCE PreferenceNameNOCONSOLEPLAINNOWAITWHERE JoinCondition AND JoinCondition .AND |

36、 OR FilterCondition AND | OR FilterCondition .GROUP BY GroupColumn , GroupColumn .HAVING FilterConditionUNION ALL SELECTCommandORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC .2022/10/242(2)SELECT-SQL语句的语法格式SELECT AL(2)SELECT-SQL语句的语法格式(续)SELECT-SQL语句相当复杂,它既可以用于单表的查询,也可以用于多表的查询。1)SELECT子句:在SE

37、LECT子句中指定在查询结果中包含的字段、表达式。2)FROM 子句:指定所有从中检索数据的表。如果表没有打开,VFP 6.0显示“打开”对话框,以便指定文件位置。表打开以后,直到查询结束时才关闭。如果包含FORCE关键字,则在建立查询时会严格按照FROM子句中描述的顺序连接表;若不包含FORCE关键字,则对查询进行优化。使用FORCE关键字,可加快查询速度。DatabaseName!用来指定数据的名称。当包含表的数据库不是当前数据库时,必须指定数据库名称,并且应在数据库名称之后表名之前加上感叹号(!)分隔符。例如,“图书馆管理!sj”表示数据管理数据库的sj表。 2022/10/243(2)

38、SELECT-SQL语句的语法格式(续)SELECT-(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

39、 2022/10/244(2)SELECT-SQL语句的语法格式(续)【例4-16】4. 定义查询结果(1)使用排序选项排序能决定查询输出结果中记录或行的顺序。例如,可按书籍的价格以升序或降序方式对书籍记录进行排序。利用排序依据选项卡可设置查询的排序次序。在“排序依据”选项卡中,“选定字段”可选择要用来排序的关键字段。选定后,添加到“排序条件”框,“排序条件”框中字段的次序决定了查询结果排序时的条件,第一个字段决定了主排序次序,其余字段决定了第二排序次序。例如,在“排序条件”框中的字段顺序是sj.jg、sj.ys,则查询结果将首先按sj.jg进行排序,如果sj表中有一个以上的记录具有同样的jg

40、字段值,这些记录则再按ys进行排序。 2022/10/2454. 定义查询结果(1)使用排序选项2022/9/24454. 定义查询结果(续)【例4.17】建立查询按书籍价格从低到高排序。观察例4.15的查询结果,可以发现其结果并没有完全按书籍价格的高低输出,若要使输出按书籍价格从低到高排列,可按以下步骤操作:1)打开查询设计器,首先选择“排序依据”选项卡。其中,“选定字段”列出了可用来排序的字段,供用户选择,“排序条件”是用户已选择好的用来排序的字段。2)从“选定字段”框中选定用来排序的字段,由于本例要按书籍价格从小到大的顺序排序,所以应选择字段sj.jg,然后单击“添加”按钮,把它移到“排

41、序条件”框中。3)从“排序选项”的两个单选按钮“升序”和“降序”中选择一个,本例选择“升序”。 4)单击常用工具栏中的“运行”按钮。将查询结果同例4.15比较。2022/10/2464. 定义查询结果(续)【例4.17】建立查询按书籍价格从低4. 定义查询结果(续)对查询结果进行排序时,在对应的SELECT-SQL命令中可包括ORDER BY子句,它的格式如下:ORDER BY Order_itemASC|DESC其中,Order_item是排序条件框中选定的排序字段,字段间用逗号(,)分隔。另外,Order_item也可以是一个数字表达式,表示查询结果中列的位置(最左边列的编号为1)。ASC

42、指定查询结果根据排序以升序排序,DESC指定以降序排列,缺省时为升序。如果不使用ORDER BY子句指定查询结果的排列顺序,则查询结果不排序。例4.17对应的SELECT-SQL语句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 图书馆管理!sj ORDER BY sj.jg2022/10/2474. 定义查询结果(续)对查询结果进行排序时,在对应的SEL(2)给字段添加说明标题为使查询结果易于阅读和理解,可以给字段添加说明标题,又称别名。给前面设计的“书籍价格”添加说明标题,操作步骤如下:1)打开“书籍价格”查询。2)在“函数和表达式”文本框中键入字段名,接着输入A

43、S和说明标题,如下所示:sj.sjmc AS 书籍名称3)单击“添加”按钮,在“选定字段”框中放置带有别名的字段。4)重复步骤2)、3),分别给sj.jg和sj.ys添加说明标题“书籍价格”和“书籍页数”。5)单击“运行”按钮,查询结果中各字段名称已变成相应的汉字说明。对应的SELECT语句如下:SELECT sj.sjbh AS 书籍编号, sj.jg AS 书籍价格, sj.ys AS 书籍页数;FROM 图书馆管理!sj2022/10/248(2)给字段添加说明标题为使查询结果易于阅读和理解,可以给字(3)使用选择条件选择数据库或表中符合条件的一部分记录而不是全部记录是查询的重要任务。例

44、如,要查询一定日期范围内的借书记录、查询所有女性读者的基本情况等。在查询设计器中,“筛选”选项卡可确定用于选择记录的字段和比较准则,以及输入与该字段进行比较的示例值。设置筛选条件是指设置筛选的逻辑表达式,这个表达式由字段、操作符和数值组成。逻辑表达式主要有下述形式:字段 操作符 表达式其中,字段是要查询的表中的字段。操作符的含义及使用示例如表4-4所示。2022/10/249(3)使用选择条件选择数据库或表中符合条件的一部分记录而不是(3)使用选择条件(续)在表4-4中,Like筛选操作符的含义是查找每个与字符表达式相匹配的字段。在字符串表达式中可使用百分号“%”和下划线“_”通配符,下划线表

45、示字符串中的任意一个字符,百分号表示任意长度的字符串。 操作符比较关系举例=相等xk.cj = 60, xk.kcbm = 02=完全相等xk.cj = 60, xk.kcbm = 02Like不精确匹配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语句如下:SELEC

46、T sj.sjmc AS 书籍名称, sj.jg AS 书籍价格, sj.ys AS 书籍页数;FROM 图书馆管理!sj ;WHERE sj.jg= 302022/10/252(3)使用选择条件(续)【例4.18】在例4.15的“书籍价(3)使用选择条件(续)【例4.19】在例4.15创建的“书籍价格”查询中,使用LIKE操作符,筛选出书籍名为软件工程的记录。1)打开“统计学生成绩”查询,并选择“筛选”选项卡。2)在“字段”下拉列表中选择sj.sjmc字段。3)在“条件”下拉列表中选择LIKE操作符。4)在“实例”文本框中输入“软件工程”。对应的SELECT语句如下:SELECT sj.sj

47、mc, sj.jg, sj.ys;FROM 图书馆管理!sj WHERE sj.sjmc LIKE 软件工程2022/10/253(3)使用选择条件(续)【例4.19】在例4.15创建的“书(4)多个筛选条件的组合使用实际使用中,经常需要查询某一范围内的记录。例如,书籍价格在30元以下或者50元以上的所有书籍,或者书籍页数在300页以上且价格在40元以上的书籍等。由于可能同时需要输入两个筛选条件,因此需要考虑筛选条件之间的关系问题。在VFP中,筛选条件间共有三种关系,即与(and)、或(or)和否(not)。例如,“书籍价格在30元以下或者50元以上”可写成sj.jg=50,而“书籍页数在30

48、0页以上且价格在40元以上的书籍”可写成sj.ys=300 and sj.jg=40。在“筛选”选项卡中,可同时输入多个筛选条件,每一个筛选条件占一行,行与行之间的缺省逻辑关系是“与”(AND),当选择其他关系时,可通过逻辑项对应行的列表来选择。 2022/10/254(4)多个筛选条件的组合使用实际使用中,经常需要查询某一范围(4)多个筛选条件的组合使用(续)【例4.20】设置“与”筛选条件。前面已经分析过,“书籍页数在300页以上且价格在40元以上的书籍”,可看成两个筛选条件的组合,即sj.ys=300 and sj.jg=40。首先建立筛选条件sj.ys=300,然后再建立另一个筛选条件

49、sj.jg=40。由于两个筛选条件之间是“与”的关系,因此不用设置“逻辑”选项。对应的SELECT语句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 图书馆管理!sj WHERE sj.ys=300 and sj.jg=40 2022/10/255(4)多个筛选条件的组合使用(续)【例4.20】设置“与”筛(4)多个筛选条件的组合使用(续)【例4.21】设置“或”(OR)筛选条件。统计“书籍价格在30元以下或者50元以上”的所有书籍,其筛选条件可写成sj.jg=50。在“筛选”选项卡中首先建立两个筛选条件,第一个是sj.jg=50。由于两个筛选条件是“或”关系,因此,

50、还要在第一个筛选条件对应的“逻辑”下拉列表中选择OR运算符。对应的SELECT语句如下:SELECT sj.sjmc, sj.jg, sj.ys;FROM 图书馆管理!sj WHERE sj.jg=502022/10/256(4)多个筛选条件的组合使用(续)【例4.21】设置“或”(4)多个筛选条件的组合使用(续)【例4.22】设置“非”(NOT)筛选条件。查询“所有书名不是软件工程的书籍”。考察“所有书名不是软件工程的书籍”和“所有书名是软件工程的书籍”是互为否定的。“所有书名是软件工程的书籍”可写成“LIKE”软件工程“”,可先设置筛选条件“LIKE”软件工程“”,然后单击该筛选条件行对应

51、的“否”按钮。对应的SELECT语句是:SELECT sj.sjmc, sj.jg, sj.ys;FROM 图书馆管理!sj WHERE sj.sjmc NOT like 软件工程 2022/10/257(4)多个筛选条件的组合使用(续)【例4.22】设置“非”(5定向输出查询结果VFP允许查询结果以不同的形式输出。例如,可输出到文件、打印机、临时表和屏幕等。缺省形式是将查询结果显示在浏览窗口中。选择查询结果输出形式的方法是:(1)从“查询”菜单中选择“查询去向”命令,打开“查询去向”对话框,如图4-14所示。打开该对话框的另一个方法是在“查询设计器”工具栏中单击“查询去向”按钮。(2)“查询

52、去向”对话框中列出了7个查询结果的输出形式,且均以按钮形式给出。选择需要的按钮,并单击“确定”按钮即可。 图4-14 “查询去向”对话框2022/10/2585定向输出查询结果VFP允许查询结果以不同的形式输出。图45定向输出查询结果(续)定向输出对应的SELECT子句是INTO Destination子句。表4-5为该子句常用格式。如输出到临时表“学生成绩清单”中可写成“INTO CURSOR 学生成绩清单”,输出到活动窗口中,可写成TO SCREEN。如果只想暂时保存结果,可将它们发送到数组或临时表中。若要永久保存结果,将它发送到一个表中。查询结果输出形式SELECT子句格式独立的表INT

53、O TABLE 表名称数组INTO ARRAY 数组名称临时表INTO CURSOR 临时表名称活动窗口TO SCREEN浏览窗口系统缺省值表4-5 定向输出查询结果子句形式2022/10/2595定向输出查询结果(续)定向输出对应的SELECT子句是I4.4.2 运行查询1运行查询在完成了查询设计并指定了输出目的地后,可以单击“运行”按钮启动该查询,也可以在命令窗口使用DO命令。例如,运行“数籍价格”查询,可在命令窗口输入:DO 书籍价格.qpr 2022/10/2604.4.2 运行查询1运行查询2022/9/24602分组查询(1)分组查询。所谓分组就是将一组类似的记录压缩成一个结果记录

54、,这样就可以完成基于一组记录的计算。【例4.23】将读者按家庭住址分组。操作步骤如下:1)新建一个“按读者住址查询”,选择读者表的所有字段。2)选择“分组依据”选项卡,选择dz.jtzz,并单击“添加”按钮。3)为保证分组正确,在“排序依据”选项卡中设置排序条件。例如dz.dzbh。4)运行查询,结果如图4-15所示。 2022/10/2612分组查询(1)分组查询。所谓分组就是将一组类似的记录压缩(1)分组查询(续)【例4.24】统计在书籍表中每个出版社出版的书籍的数目。操作步骤如下:1)建立一个查询,选择sj表中的所有字段,在“分组依据”选项卡中选择sj.cbs,在“排序依据”选项卡中选择

55、sj.sjbh。2)在“字段”选项卡中,在“函数和表达式”框中输入“count(sj.cbs) as 数量”,并单击“添加”按钮。3)运行查询,其结果如图4-16所示。图4-16 统计出版社的出版数量2022/10/262(1)分组查询(续)【例4.24】统计在书籍表中每个出版社出(2)为查询增加计算字段【例4.25】统计每个出版社的所出书中价格最低的书籍,可按如下步骤操作:1)创建一个查询,选择书籍表中的sj.sjmc、sj.sjzz、sj.jg, sj.ys。2)选择“字段”选项卡,在“函数和表达式”文本框中输入“MIN(sj.jg) AS最便宜的图书”。3)单击“添加”按钮。4)选择“分

56、组依据”选项卡,选择sj.cbs,并单击“添加”按钮。5)若需要排序,此时可在“排序依据”选项卡中设置排序条件,如sj.ys。 “MIN(sj.jg) AS 最便宜的图书”是一个函数表达式,在查询结果中以“最便宜的图书”名称给出。此列不是表中原有的字段,而是在生成查询的过程中经过计算得到的,又称为计算列或计算字段。2022/10/263(2)为查询增加计算字段【例4.25】统计每个出版社的所出书(2)为查询增加计算字段(续)VFP提供了“字符串、数学、逻辑和日期”4类函数。表4-6列出了在SELECT-SQL中经常使用的列函数。列函数均产生一个单值,因此以下查询求出所有图书的总价格。SELEC

57、T sj.mc sj.jg sj.sjbh SUM(sj.jg) AS 总价格;FROM sj函数功能AVG(列名)求出指定列上的平均值,只适用于数字类型的列SUM(列名)求出指定列上的和。只适用于数字类型的列MIN(列名)求出指定列上的最小值。列可以是数字型、字符型或日期型MAX(列名)求出指定列上的最大值,列可以是数字型、字符型或日期型COUNT(列名)求出指定列上的值的出现个数表4-6 常用列函数2022/10/264(2)为查询增加计算字段(续)VFP提供了“字符串、数学、逻(2)为查询增加计算字段(续)在“函数和表达式”文本框中输入函数可以使用表达式生成器,单击“函数和表达式”文本框

58、旁的“.”按钮可启动表达式生成器,如图4-17所示。在表达式生成器中,有“字符串、数学、逻辑和日期”4类函数,每一类函数对应一个下拉列表,在列表中可选择相应的函数,然后再输入相应的变量。图4-17 表达式生成器2022/10/265(2)为查询增加计算字段(续)在“函数和表达式”文本框中输入(2)为查询增加计算字段(续)例,“SUM (sj.jg) AS 总价格”函数的输入方法如下:1)在“数学”下拉列表中选择SUM函数,表达式文本框中出现SUM(expN)。2)选取expN。3)在“字段”列表框中选择需要的字段变量或从键盘输入相应的表达式,例如si.jg以便代替expN。4)在“表达式”文本

59、框的SUM函数后添加“AS 总价格”,将表达式修改成“SUM(sj.jg) AS 总价格”。5)单击“检验”按钮可检验输入的表达式的正确性,若正确无误后,可单击“确定”按钮,返回查询设计器。此时在“函数和表达式”框中出现“SUM(sj.jg) AS 总成绩”。6)单击“添加”按钮,“总成绩”项将出现在查询结果中。2022/10/266(2)为查询增加计算字段(续)例,“SUM (sj.jg) (2)为查询增加计算字段(续)【例4.26】已知sj表,可以使用AVG()列函数求每个出版社的书籍的平均价格。下面给出SELECT语句:SELECT sj.mc,sj.jg, sj.ys, sj.sjzz

60、,;AVG(sj.jg) AS 平均价格;FROM sj;GROUP BY sj.cbs;ORDER BY sj.sjbh【例4.27】在“统计平均价格”查询中,添加“总价格”列。相应的SELECT语句如下:SELECT sj.mc,sj.jg, sj.ys, sj.sjzz,;AVG(sj.jg) AS 平均价格, SUM(sj.jg);FROM sj;GROUP BY sj.cbs;ORDER BY sj.sjbh 2022/10/267(2)为查询增加计算字段(续)【例4.26】已知sj表,可以3筛选分组WHERE、HAVING子句都能为查询提供过滤条件。一般来说,HAVING子句用来过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论