首页 第4章 查询与视图

第4章 查询与视图

举报
开通vip

第4章 查询与视图 第 4 章 查询与视图 在软件开发中经常用到数据的查询,如学生成绩管理,人事档案,图书检索 等软件,查询的准确、速度直接影响软件的质量、效率、应用及维护,VFP 开发 工具用三个途径解决查询问题。第一个途径就是运用 SQL 语句查询,第二个途 径就是用查询设计器建立快速查询,第三个途径是用视图设计器建立视图,实现 快速查询。 4.1 查询的一般概念 4.1.1 查询 VFP 中的查询使用查询设计器,从数据库表或自由表中获取有用数据,经过 对查询条件、查询要求的设置,形成一个*.QPR 文件,通过 DO...

第4章 查询与视图
第 4 章 查询与视图 在软件开发中经常用到数据的查询,如学生成绩管理,人事档案,图书检索 等软件,查询的准确、速度直接影响软件的质量、效率、应用及维护,VFP 开发 工具用三个途径解决查询问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 。第一个途径就是运用 SQL 语句查询,第二个途 径就是用查询设计器建立快速查询,第三个途径是用视图设计器建立视图,实现 快速查询。 4.1 查询的一般概念 4.1.1 查询 VFP 中的查询使用查询设计器,从数据库 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 或自由表中获取有用数据,经过 对查询条件、查询要求的设置,形成一个*.QPR 文件,通过 DO 命令来执行。 4.1.2 视图 VFP 中的视图是用视图设计器从数据库表中获取有用数据,与查询一样经过 查询条件、查询要求的设置形成视图。视图是以视图名的形式存在数据库中。视 图中数据的更新可以使源表相应数据更新。视图的执行要在数据库中执行。 4.1.3 SQL 查询 SQL 是关系数据库的国际 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 语言。为此,世界上许多语言开发商都将 SQL 语言作为数据库对数据存取的共同标准接口。有的已将 SQL 语言嵌入到语言开 发工具中,使得人们在软件开发时运用数据库是极为方便。之所以 SQL 能成为 国际标准语言,主要原因它是结构化的查询语言。它的综合统一体现在它集数据 定义语言、数据操纵语言、数据控制语言的功能为一体。再就是它高度的非过程 化,无需一步步地告诉计算机如何做,只要指名怎么做系统就可以自动完成。SQL 语言简单便于掌握,特别是在查询复杂可视化工具无法解决时,SQL 可以解决。 4.2 SQL 语句 4.2.1 SELECT 查询语句 1.基本语句 格式:SELECT <行列限制表达式> [INTO DBF | TABLE<新表名>] FROM < 表名列表> [WHERE <条件>] 功能:从表名列表的表中查找符合条件的,按<行列限制表达式>的形式显 示。若选[INTO DBF | TABLE<新表名>]子句,查询结果存入新表。 说明:<行列限制表达式>格式: [ALL | DISTINCT] [TOP <数值表达式> [PERCENT]] [别名.] [列名 [AS 栏 目名]][, [别名.] [列名 AS [栏目名]…] (1)[ALL | DISTINCT]子句:ALL 输出结果有重复记录,是子句默认值。 DISTINCT 输出结果无重复记录。 (2)[TOP <数值表达式> [PERCENT]]子句:此子句 TOP <数值表达式>是符合 条件的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 中取前<数值表达式>个记录。PERCENT 是取前面分之<数值表达式> 个记录。 (3)[别名.] [列名 [AS 栏目名]] [, [别名.] [列名 AS [栏目名]…]子句:列名可 以是字段、含字段的表达式或表达式。指定输出结果中的字段,此子句也可用* 代替此时显示表中所有字段。 例 4.1 SELECT 基本语句应用 USE 学生 1 SELECT * FROM 学生 1 OPEN DATABASE 学生 &&打开学生数据库 SELECT * FROM 学生 INTO TABLE 学生 y &&显示学生表中所有内容 SELECT 姓名,入学成绩 FROM 学生 WHERE 入学成绩>=500 SELECT DISTINCT 姓名,入学成绩 FROM 学生 WHERE 入学成绩>=500 SELECT 学生 .学号 ,学生 .姓名 ,学生成绩 .数学 FROM 学生 ,学生成绩 WHERE 学生.性别=’女' AND 学生成绩.数学>=60 AND 学生.学号=学生成绩. 学号 SELECT TOP 2 * FROM 学生 ORDER BY 学号 CLOSE DATABASE ALL 2.SELECT 中常用的系统函数 在实际应用中经常在查询结果进行统计、求平均值、汇总等基本要求。SQL 提供了一些常用的系统函数。如表 4.1 所示。 表 4.1 常用系统函数 函数 说明 AVG(的平均值 COUNT() 求) 求) 求:为[DISTINCT|ALL] 表达式。 说明:DISTINCT 在计算时去掉重复值,ALL 在计算所有值是默认值,表达 式可为*、字段名、数学函数、常量、函数或表达式。 3.SELECT 分组子句 格式:[GROUP BY <表达式 1>[, <表达式 2>[, …] [HAVING <筛选条件>] 功能:对查询结果进行分组。[HAVING <筛选条件>]为指定分组必须满足的 条件。 例 4.2 分组查询应用。 OPEN DATABASE 学生 SELECT AVG(入学成绩) FROM 学生 SELECT COUNT(*) FROM 学生 SELECT SUM(入学成绩) FROM 学生 GROUP BY 性别 SELECT COUNT(*) AS '学生人数' FROM 学生 GROUP BY 性别 HAVING (入学成绩)>460 SELECT 学生.学号,AVG(学生.入学成绩),学生成绩.VFP FROM 学生,学生 成绩 GROUP BY 性别 HAVING (入学成绩)>=500 WHERE 学生.学号=学生成 绩.学号 4.排序子句 格式:[ORDER BY <关键字表达式> [ASC | DESC] [, <关键字表达式> [ASC | DESC]…]] 功能:查询结果按关键字排序,ASC 升序为默认值,DESC 为降序。 例 4.3 查询排序应用 OPEN DATABASE 学生 SELECT 学号,姓名,入学成绩 FROM 学生 ORDER BY 入学成绩 DESC SELECT 学生 .学号 ,学生 .姓名 ,学生成绩 .英语 FROM 学生 ,学生成绩 WHERE 学生.学号=学生成绩.学号 GROUP BY 学生.学号 ORDER BY 学生成 绩.英语 SELECT AVG(入学成绩) AS "入学成绩平均分" FROM 学生 GROUP BY 性别 ORDER BY 入学成绩 DESC CLOSE DATABASE ALL 5.嵌套查询 嵌套查询就是在 SELECT 语句中套有 SELECT 语句,被套在内的 SELECT 子句通常称为子查询。 (1)IN 等谓词及比较运算符结合使用。 例 4.4 IN 与 NOT IN 在嵌套查询中的应用 OPEN DATABASE 学生 SELECT * FROM 学生 WHERE 学号 IN(SELECT 学号 FROM 学生成绩 WHERE 英语>=90) SELECT * FROM 学生 WHERE 学号 NOT IN(SELECT 学号 FROM 学 生成绩 WHERE 英语<90) CLOSE DATABASE ALL 例 4.5 比较运算符在嵌套查询中的应用。 OPEN DATABASE 学生 SELECT * FROM 学生 a1 WHERE 入学成绩=(SELECT 入学成绩 FROM 学生 a2 WHERE a1.学号=a2.学号 AND 入学成绩>=500) CLOSE DATABASE ALL (2)使用量词和谓词的嵌套查询 格式:<表达式> <比较表达式> [ANY | ALL | SOME] (子查询) [NOT] EXIST(子查询) 说明:ANY、ALL、SOME 为量词,ANY 与 SOME 是同义词,在查询时, 只要子查询中有一行能使结果为.T.,则结果就为.T.。ALL 要求子查询中所有行 结果为.T.时,结果才能为.T.。EXIST 或 NOT EXIST 是检查在子查询中是否有结 果返回。EXIST 为有结果返回为真否则为假。NOT EXIST 刚好与 EXIST 相反。 例 4.6 查询数学成绩高于 90 分的学生的学号,姓名。 OPEN DATABASE 学生 SELECT 学号,姓名 FROM 学生 WHERE EXIST(SELECT * FROM 学生 成绩 WHERE 学号=学生.学号 AND 数学>=90) 例 4.7 查找所有入学成绩大于等于 500 分年龄都小的学生。 OPEN DATABASE 学生 SELECT * FROM 学生 WHERE 出生>ALL (SELECT 出生 FROM 学生 WHERE 入学成绩<500) CLOSE DATABASE ALL 6.几个特殊运算符 (1)BETWEEN …AND…运算符 格式:BETWEEN <表达式 1> AND <表达式 2> 说明:表示在…的范围。 例 4.8 查询入学成绩 480-600 分的学生情况,与不在 500-600 之间的学生。 OPEN DATABASE 学生 SELECT * FROM 学生 WHERE 入学成绩 BETWEEN 490 AND 600 SELECT * FROM 学生 WHERE 入学成绩 NOT BETWEEN 500 AND 600 CLOSE DATABASE ALL (2)LIKE 运算符 说明:LIKE 后含有%或_通配符的字符型表达式。%表示 0 个或多个字符, _表示一个字符。 例 4.9 查询姓王的所有学生情况,查询姓名前两个字为王丽的学生情况。 OPEN DATABASE 学生 SELECT * FROM 学生 WHERE 姓名 LIKE "王%" SELECT * FROM 学生 WHERE 姓名 LIKE "王丽_" CLOSE DATABASE ALL 7.连接查询 格式:<表名 1> [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN ON <连接条件> <表名 2>] 说明: (1)INNER 为内联接。内连接是指按连接条件合并两个表,只要满足条件的 记录出现在结果中,内联接可以省略 INNER。 例 4.10 查找学生专业库中,学生情况及选修课成绩情况 OPEN DATABASE 学生专业 SELECT * FROM 学生专业 INNER JOIN 选修 ON 学生专业.学号=选修. 学号 CLOSE DATABASE ALL (2)LEFT JOIN 为左连接,在满足连接条件的记录出现在结果中基础上,第 一个表不满足条件的记录也出现在结果中。若加 OUTER 只是除了同以上连接为 外连接,OUTER 表示强调,OUTER 通常省略。 例 4.11 用左联接查找学生情况与选修课情况。 OPEN DATABASE 学生专业 SELECT * FROM 学生专业 LEFT JOIN 选修 ON 学生专业.学号=选修.学 号 CLOSE DATABASE ALL (3)RIGHT JOIN 为右连接,在满足连接条件的记录出现在结果中基础上,第 二个表不满足条件的记录也出现在结果中。 例 4.12 用右连接查找学生情况与选修课情况 OPEN DATABASE 学生专业 SELECT * FROM 学生专业 RIGHT JOIN 选修 ON 学生专业.学号=选修. 学号 CLOSE DATABASE ALL (4)FULL JOIN 为全连接。即满足连接条件的记录出现在结果上,两表不满 足连接条件的记录也出现在结果上。 例 4.13 用全连接查找学生情况与选修课情况 OPEN DATABASE 学生专业 SELECT * FROM 学生专业 FULL JOIN 选修 ON 学生专业.学号=选修.学 号 CLOSE DATABASE ALL 8.UNION 子句 也称集合并运算,用此子句可以将多个表的查询结果,合并成一个结果,要 求查询结果具有相同字段与个数,且对应字段类型要兼容。 例 4.14 建立三个表,计算机应用、计算机软件、计算机硬件它们的结构为 专业 C(3),学号 C(9),姓名 C(6),数学 C(N, 3),英语 C(N, 3),C 语言 C(N, 3) 然后建立一个数据库,计算机并将三个表添入库中,然后用 UNION 查看所有内 容。3 个表内容如表 4.2 所示 表 4.2 计算机专业学生成绩 专业 学号 姓名 数学 英语 C 语言 计算机应用 105010101 刘晓华 80 90 60 计算机应用 105010102 李立明 90 100 70 计算机软件 105020101 王雪梅 90 70 100 计算机软件 105020102 李德勇 60 80 68 计算机硬件 105030101 方芳 80 90 100 计算机硬件 105030102 王良 90 92 60 CREATE 计算机应用 INDEX ON 学号 TAG t1 CREATE 计算机软件 INDEX ON 学号 TAG t2 CREATE 计算机硬件 INDEX ON 学号 TAG t3 CREATE DATABASE 计算机 ADD TABLE 计算机应用 ADD TABLE 计算机软件 ADD TABLE 计算机硬件 SELECT * FROM 计算机应用 UNION ALL; SELECT * FROM 计算机软件 UNION ALL; SELECT * FROM 计算机硬件 CLOSE DATABASE ALL 9.关于查询结果的存放 (1)用 INTO [DBF | TABLE]<表名>可将查询结果存放表中。 (2)用 INTO ARRAY <数组名>将查询结果存入数组。 (3)用 INTO CURSOR <临时表名>将查询结果存入临时表。 (4)用 TO FILE <文件名> [ADDTIVE]将结果存入文本文件,用 ADDITIVE 将结果追加到由<文件名>指定的文本文件尾部。否则将覆盖原有文件。 (5)用 TO PRINT [PROMPT]将查询结果输出到打印机,若选 PROMPT 选项 在打印前打开打印机设置对话框。 例 4.15 关于结果存放的应用。 OPEN DATABASE 学生 SELECT * FROM 学生 INTO TABLE 新学生 SELECT * FROM 学生 INTO ARRAY a SELECT * FROM 学生 INTO CURSOR 临时学生 SELECT * FROM 学生 TO FILE 学生文本 CLOSE DATABASE ALL 10.SELECT 完整语句格式 格式:SELECT [ALL | DISTINCT] [TOP <数值表达式> [PERCENT]] [别名.] 列名 [AS 栏目名] [, [别名.] 列名 [AS 栏目名]…] [FROM [FORCE] [数据库名!] <表名> [[AS] <本地名>] [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN <数据库 >!] <表名> [[AS] <本地名>] [ON <连接条件>…] [[INTO <目标> | TO FILE <文件名> [ADDITIVE] | TO PRINT [PROMPT] | TO SCREEN]] [PREFERENCE 参数名] [NOCONSOLE] [PLAIN] [NOWAIT] [WHERE <联接条件> [AND <联接条件>…] [AND | OR <筛选条件>…]] [GROUP BY <表达式 1> [, <表达式 2>…]] [HAVING <筛选条件>] [UNION [ALL] SELECT 命令] [ORDER BY <关键字表达式> [ASC | DESC] [,<关键字表达式> [ASC | DESC]…]] 从以上 SELECT 格式看很长也很复杂,但在前面已将常用的重要的部分介 绍过了。下面对不常用的子句的作用、形式作一介绍。 说明: (1)FORCE 用来在按连接条件来连接表查询时,VFP 不进行优化。 (2)PREFERENCE<参数名>子句:用于记载浏览窗口的配置参数,再次使用 该子句时可用参数名引用此配置参数。 (3)[NOCONSOLE]子句:禁止将查询结果在屏幕显示,若选 INTO 子句忽略 它的设置。 (4)[PLAIN]子句:输出时省略字段名,若选用 INTO 子句忽略它的设置。 (5)[NO WAIT]子句:显示结果后,程序继续执行。 (6)<数据库>!表名是指非当前数据库的表。 4.2.2 操作功能(插入、更新、删除) 1.插入 格式 1:INSERT INTO <表名> [字段名 1[, 字段名 2, …]] VALUES (表达式 1[, 表达式 2…]) 格式 2:INSERT INTO <表名> FROM ARRAY 数组名 | MEMVAR 功能:在表尾添加一个指定字段的记录。 说明: (1)格式 1 中字段名 1,字段名 2,… 是用于指定添加记录的字段名,若省 略,说明所有字段,表达式 1,表达式 2,…是添加字段 1,字段 2,…的具体值。 (2)格式 2 ARRAY 数组名是从指定的数组中添加记录的值,MEMVAR 是从 与字段同名的内存变量中添加记录的值。 例 4.16 插入应用。 OPEN DATABASE 学生 COPY FILES 学生成绩.* TO 学生成绩 1.* USE 学生成绩 1 LIST INSERT INTO 学生成绩 1 VALUE ("10501012",90,80,72) LIST GO 1 SCATTER MEMVAR &&将当前记录读到内存变量 INSERT INTO 学生成绩 1 FROM MEMVAR GO 2 SCATTER TO a &&将当前记录读到 a 数组 INSERT INTO 学生成绩 1 FROM ARRAY a USE 2.更新 格式:UPDATE <表名> SET 字段名 1=<表达式 1> [, 字段名 2=<表达式 2>…] [WHERE <条件>] 功能:更新满足条件的记录的值,若省略 WHERE,更新全部记录的值。 例 4.17 更新应用。 Use 学生成绩 1 UPDATE 学生成绩 1 SET 数学=数学+10 WHERE 数学<80 UPDATE 学生成绩 1 SET 英语=英语+10 USE 3.删除 格式:DELETE FROM <表名>[WHERE <条件>] 功能:删除符合条件的记录,若省略 WHERE 将删除全部记录。 例 4.18 删除应用。 USE 学生成绩 1 DELETE FROM 学生成绩 1 WHERE 英语>100 USE 4.2.3 定义功能 SQL 语句也可以定义表、视图。现在简单加以介绍。 1.定义表 在 2.1.2 中用命令创建表,此格式为 SQL 创建表的基本语句,现给出它的完 整形式。 格式:CREATE TABLE|DBF <表名 1>(<字段名 1>, 类型, (<宽度>) [NULL | NOT NULL] [CHECK <逻辑表达式 1> [ERROR <出错信息>]] [DEFAULT <表达式 1>] [PRIMARY KEY | UNIQUE] [REFERENCE <表名 2> [TAG <索引标识符名 1>]] [NOCPTRANS][, <字段名 2>…] | [FROM ARRAY <数组名>] [, PRIMARY KEY <表达式 2> TAG <索引标识符名 2> [, UNIQUE <表达式 3> TAG <索引标识符 3>] [, FOREIGN KEY <表达式 4> TAG <索引标识符名 4>[NODUP] REFERNCES <表名 3> [TAG <索引标识符名 5>]] [, CHECK <逻辑表达式> [ERROR <出错信息 2>]]] 说明: (1)[NULL | NOT NULL]子句说明字段是否可取空值(NULL)。 (2)[CHECK <逻辑表达式> [ERROR <出错信息>]子句用于说明字段的有效 性规则。<逻辑表达式>是有效性规则,<出错信息>是为字段有效性规则检查出 错时给出的提示信息。 (3)[DEFAULT <表达式 1>]子句使用表达式值给出字段的默认值。 (4)[PRIMARY KEY|UNIQUE]子句是以该字段创建索引,取 PRIMARY KEY 创建的是主索引,取 UNIQUE 创建的是候选索引。 (5)[REFERENCE <表名 2>][TAG <索引标识名>]子句用于指定与建立永久关 系的父表名。<表名 2>为父表名,若省略[TAG <索引标识符名>]就在父表已存在 的索引标识上建立联系。 (6)[NOCPTRANS]子句用于指定 C 或 M 型。主字段不进行代码页转换。只 能用于 C、M 型字段。 (7)PRIMARY KEY <表达式 2> TAG <索引标识符 2>子句指定要创建的主索 引。<表达式 2>为表中字段组合。一个表只能有一个主索引,如已建立主索引就 不可以用此子句。 (8)UNIQUE <表达式 3> TAG <索引标识符名 3>创建候选索引。<表达式 3> 为表中字段组合。 (9)[FOREIGN KEY <表达式 4> TAG <索引标识符名 4>[NODUP]子句,用于 建立普通索引。并与父表建立联系。 (10)[CHECK <逻辑表达式>[ERROR <出错信息 2>]]子句,与 2 的意义相同。 (11)[REFERNCES <表名 3>[TAG <索引标识符名 5>]]子句与 5 含义同。 (12)[FROM ARRAY <数组名>]子句用于从一个已存在数组中取出字段名、 类型、宽度。 例 4.19 建表应用。 OPEN DATABASE 学生 CREATE TABLE 学生成绩 x(学号 C(9) PRIMARY KEY ,编译 N(3) CHECK (编译>=0 AND 编译<=100) ERROR "编译成绩再 0-100 之间" DEFAULT 0, FOREIGN KEY 学号 tag 学号 REFERENCES 学号) CLOSE DATABASE ALL 2.定义视图 格式:CREATE VIEW 视图名 AS SELECT 语句 功能:建立视图。用 SELECT 语句限定视图数据。 例 4.20 建立视图 OPEN DATABASE 学生 CREATE VIEW 学生视图 AS SELECT * FROM 学生 WHERE 入学成绩 >=500 CLOSE DATABASE ALL 3.删除视图 格式:DROP VIEW 视图名 功能:删除视图。 例 4.21 视图的删除。 OPEN DATABASE 学生 DROP VIEW 学生视图 CLOSE DATABASE ALL 4.3 查询 在 4.2 节中介绍了 SELECT 语句,它适合于复杂条件的查询。VFP 提供了用 查询设计器进行查询,它的每一个查询都对应一个 SELECT 语句。由于已学完 SELECT 语句,现在再学查询设计器,就会感到它的方便简单。它很形象,可 以将查询结果用浏览器、报表、表、图形等来表示出来。 4.3.1 建立查询 1.用向导建立查询 (1)建立 文件菜单→新建或常用工具栏新建按钮,选文件类型为查询→向导,打开向 导选取对话框(见图 4.1),选择查询向导→确定,打开向导对话框步骤 1—字段 选取(见图 4.2)→3 个点按钮,打开打开对话框,文件类型选数据库,选学生 库→确定,在数据库和表列表框中选学生表→将可用字段中字段选入选定字段 中,再在数据库和表列表框中选学生成绩表→将可用字段中字段选入选定字段中 →下一步,进入查询向导步骤 2—为表建立关系(见图 4.3)。添加→下一步进入 查询向导步骤 2a→字段选取(见图 4.4)→下一步进入查询向导步骤 3—筛选记 录(见图 4.5)→下一步进入查询向导步骤 4—排序记录(见图 4.6),选学生.学 号→添加→下一步,进入查询向导步骤 4a—限制记录对话框(见图 4.7)→下一 步进入步骤 5—完成对话框(见图 4.8)→预览→完成。打开另存为对话框,在 文件名文本框输入查询学生→保存。在查询设计器打开下,通过查询菜单,查询 SQL 选项可查看对应的 SQL SELECT 语句。 图 4.1 向导选取对话框 图 4.2 查询向导步骤 1 对话框 图 4.3 查询向导步骤 2 对话框 图 4.4 查询向导步骤 2a 图 4.5 查询向导步骤 3—筛选记录 图 4.6 查询向导步骤 4—排序记录 图 4.7 查询向导步骤 4a—限制记录 图 4.8 查询向导步骤 5—完成对话框 2.用查询设计器建立查询 文件→新建或常用工具栏的新建按钮,打开新建对话框,选查询→新建文件 按钮,打开打开对话框,选学生表→确定(见图 4.9)。在添加表或视图对话框中 选学生表→添加,选学生成绩表→添加→关闭。进入如图 4.10 所示查询设计器 中。 图 4.9 添加表或视图对话框 图 4.10 查询设计器 在查询设计器中有几个选项卡,含义为: (1)字段选项卡,对应于 SELECT 中的输出结果字段。 (2)联接选项卡,对应于 SELECT 中的 JOIN 子句。 (3)筛选选项卡,对应于 SELECT 中 WHERE 子句。 (4)分组选项卡,对应于 SELECT 中 GROUP 与 HAVING 子句。 (5)排序选项卡,对应于 SELECT 中 ORDER BY 子句。 (6)杂项选项卡,对应于 SELECT 中[ALL|DISTINCT]子句与[TOP …]子句。 在字段选项卡中函数和表达式,3 点按钮用于在可用字段中设函数和表达 式。→全部添加→联接选项卡、取默认内联接在类型内容左边有一个水平向外双 向箭头按钮,若单击此按钮打开联接条件对话框,显示联接条件的一些信息。若 单击类型下面的列表框,显示所有可选的连接类型。→筛选选项卡→字段名下拉 表框选学生.学号→条件为=,单击条件下拉列表框,显示所有可选条件。→在实 例文本框中输入学生成绩.学号→排序选项卡,在字段列表框框中选学生.学号→ 添加→分组选项卡→在可用字段列表框中选学生.性别→添加→杂项取默认全部 →常用工具栏中的执行按钮或程序菜单中→运行,显示查询对话框→查询中关闭 按钮→查询设计器中关闭组,打开确认对话框→是,打开另存对话框,在保存文 件名中输入查询学生 1→保存。 3.定向输出查询结果 在查询设计器打开基础上:查询菜单→查询去向,打开查询去向对话框(见 图 4.11),默认为浏览即屏幕输出。 图 4.11 查询去向 可根据需要选择临时表、表、图形、屏幕、报表、标签,→确定即可。这些 选择的说明如表 4.3 所示。 表 4.3 查询输出去向类型说明 输出类型 说明 浏览 在 BROWSE 窗口显示结果 临时表 结果存在一个命名的临时表中 表 结果存在一个命名的表中 图形 查询结果与 Microsoft Graph 一起应用 屏幕 结果显示 VPF 窗口或当前活动输出窗口中 报表 输出到报表文件(*.FRX)中 标签 输出到标签文件(*.LBX)中 4.3.2 执行查询 1.文件→打开,再打开对话框中选文件类型为查询,选文件名为查询学生 1→确定。 程序→运行或单击常用工具栏中的运行按钮。 2.在命令窗口中输入 DO 查询学生 1.qpr。 4.3.3 查询设计器的局限性 用查询设计器建立的查询,简单,易学,但在应用中有一定的局限性,它实 用于比较规范的查询,而对于较复杂的查询是无法实现的,下面来看一个用 SELECT 查询的例子。 例 4.22 查询入学成绩 建一个查询 X.qpr 程序文件 OPEN DATABASE 学生 SELECT a1.学号, a1.姓名, a1.入学成绩 FROM 学生 AS a1; WHERE 入学成绩=(SELECT MAX(入学成绩) FROM 学生 AS b1 WHERE a1.学号=b1.学号) 这个例子用查询分析器是无法完成查询的,若用查询设计器修改常出现如图 4.12 所示的对话框。 图 4.12 提示信息对话框 4.4 视图查询 数据库中只存放视图的定义,视图的定义被保存在数据库中,数据库不存放 视图的对应数据,这些数据仍然存放在表中。 视图与查询一样都是要从表中获取数据,它查询的基础实质上都是 SELECT 语句,它们的创建步骤也是相似的。视图与查询的区别主要是:视图是一个虚表, 而查询是以*.qpr 文件形式存放在磁盘中,更新视图的数据同时也就更新了表的 数据,这一点与查询是完全不同的。视图从获取数据来源可将它分为本地视图和 远程视图两种。本地视图是指使用当前数据库中表建立的视图,远程视图是指使 用非当前数据库的数据源中的表建立的视图。 4.4.1 建立本地视图 1. 用向导建立本地视图 在打开所需数据库的基础上,文件→新建或使用工具栏中的新建按钮,打开 新建对话框→选文件类型视图→向导,然后按向导提示完成操作。 2. 用视图设计器建立本地视图 在打开所需数据库的基础上,文件→新建或使用工具栏中的新建按钮→文件 类型视图→新建文件按钮,打开添加表或视图对话框→在数据库的下拉列表框中 选择所需数据库→在数据库的列表框中选表→添加,若需多表可反复选表单击 “添加”按钮→关闭,打开如图 4.13 所示的视图设计器,它与查询设计器几乎 一样,就多一个更新条件选项卡,以后步骤除更新条件选项卡外都与查询设计器 在建立查询时一样的步骤。 图 4.13 视图设计器 最后关闭视图设计器,打开确认对话框→是,打开保存对话输入视图名→确 认。 3. 远程视图与连接 (1)建立连接 文件→新建或使用工具栏中的新建按钮,打开新建对话框→文件类型选连接 →新建文件按钮,打开连接设计器如图4.14所示。→新建数据源,打开ODBC Data Source Administrator 对话框,如图 4.15 所示。→User Data Source 卡,如图 4.16 所示→add→打开如图 4.17 所示。→Microsoft Visual Foxpro driver 对话框→完成 →打开如图 4.18 所示。在 Data Source None 文本框中输入数据源名 qqq→打开如 图 4.19 的 select DataSource 对话框→选所需数据库→打开→ok→确定→在数据 源下拉列表框中选 qqq→验证连接,显示连接设计器连接成功对话框→确定→关 闭,打开 Microsoft Visual Foxpro 对话框→打开保存对话框→在连接文本框中输 入连接名→确定。 图 4.14 图 4.15 图 4.17 图 4.18 图 4.19 (2)建立远程试图 1)用向导: 在数据库打开的基础上,文件→新建或使用工具栏中的新建按钮,打开新建 对话框→在文件类型选远程试图→向导→打开如图 4.20 所示远程向导步骤数据 源选取对话框→在不用数据源列表框选数据源 qqq→下一步→步骤 2→字段选取 对话框如图 4.21 所示→在列表框中选表→在可用字段列表框中选字段,若为多 表,可重复选表与选字段操作→下一步,进入步骤 3→为表建立关系,如图 4.22 所示→添加→下一步,步骤 3→字段选取如图 4.23 所示→下一步,进入步骤 4 排列记录,如图 4.24 选字段→下一步进入步骤 5→筛选记录如图 4.25 所示→下 一步进入步骤 6 完成如图 4.26→完成打开视图对话框,如图 4.27→在远程视图各 文本框中输入视图→确定。 图 4.20 图 4.21 图 4.22 图 4.23 图 4.24 图 4.25 图 4.26 图 4.27 2)用视图设计器建立远程视图 文件→新建或使用工具栏中的新建按钮,打开新建对话框→如图 4.28 在文件 类型中选远程视图→新键文件按钮,打开选择按钮或数据源对话框,在数据库的 连接列表框中选一个需要的连接→确定,打开对话框如图 4.29 所示→选表→添 加,多表时可重复选表与添加操作→关闭进入视图设计器;以后步骤与本地视图 步骤一样。 图 4.28 图 4.29 4.4.3 视图与更新 通过视图进行查询时,其结果时只读的。要想对视图查询结果进行修改,必 须在视图设计器中的更新条件选项卡中进行一些相应的设置,视图的修改可以使 得原表随着修改 1. 设置关键字段与更新字段 在视图设计中→更新条件选项卡,如图 4.30 所示。字段各列表框中显示着 视图查询结果中的字段名→字段名左侧带钥匙的为关键字段,此时出现 V,说明 此字段已经设置为了关键字段,若要恢复到设置前的初始状态,可单击重置关键 字按钮→字段名左侧出现修改完毕标识,说明此字段已设置为更新字段。若要更 新所有字段,可将所有字段设为更新→全部更新。 图 4.30 2.向表发送更新数据 若要将视图修改结果送到源表即视图更新让源表随着更新→发送 SQL 更新 复选框即可。 3.检查更新冲突 主要用于多用户工作环境中,视图数据源中的数据可能正在被其他用户访问, 这包括用户对数据的使用,更新,删除等操作,为了让 VFP 检查视图所用数据 源中的数据在更新前是否被其他用户修改过,可使用更新选项卡中的 SQL WHERE 子句,包括框中的选项来帮助管理遇到其他用户访问同一用户时如何更 新记录。 下面给出 SQL WHERE 子句包括框中各单选按钮的含义。 (1)关键字段:当源表中的关键字段被改变时,使更新失败。 (2)关键字段和可更新字段:当远程表中的任何标记可更新的字段被改变时, 更新失败。 (3)关键字和修改字段:当在视图中改变任意字段的值时,源表中已被改变时, 更新失败。 (4)关键字和时间戳:当远程表上记录的时间戳在首次检索之后被更改时,更 新失败。 (5)使用更新方式 使用更新框主要用于对视图更新方法的控制,它有两个单选按钮: a)SQL DELETE 然后 INSERT 含义为先用 SQL DELETE 命令将旧值删除, 然后用 SQL INSERT 命令向源表插入更新记录。 b)SQL UPDATE 含义为:使用 SQL UPDATE 更新信息表记录。 4.4.4 运行视图 在数据库打开基础上,以下操作之一: (1)双击视图标题拦 (2)选视图→右键,打开快捷菜单如图 4.31 所示→修改,打开视图设计器→ 使用工具拦的运行按钮。 图 4.31 (3)用命令 USE<视图名> 按回车键。 4.5 小结 查询在数据处理中的应用是很普遍的,VFP 运用 SELECT 语句,查询,视 图来完成查询,SELECT 语句对于简单到复杂要求的查询都可以实现,查询与视 图实质上也是基于 SELECT 语句的查询。查询与视图简单方便,它们很相似, 但也有一定的区别,查询是以文件形式存放于磁盘中,而视图是存放在数据库中 的一个虚表,视图与查询的主要区别在于视图中数据的修改可以使源表数据改 变。 1.选择题 (1)查询与视图正确的叙述是( ) A 查询与视图都可以更新表 B 查询与视图都不可以更新表 C 查询不可以更新表,而视图可以更新表 D 查询可以更新表,而视图不可 以更新表 (2)查询的正确叙述是( ) A 只能用自由表建立查询 B 不能用自由表建立查询 C 只能用数据库表建立查询 D 自由表、数据库表都可以建立查询 (3)视图正确叙述是( ) A 只能用自有表建立查询 B 不能用自由表建立查询 C 只能用数据库表建立查询 D 自由表、数据库表都可以建立查询 (4)查询的默认输出去向是( ) A 浏览 B 临时表 C 表 D 屏幕 (5)SQL 语句中条件子句的关键字是( ) A FOR B WHILE C WHERE D IF 2.对学生,学生成绩,学生成绩 F 表应用 SQL 的 SELECL 命令查询。 (1)查询入学成绩大于等于 500 分的学生自然情况。 (2)查询姓名为王丽华学生的 VFP 的所有成绩。 (3)查询性别为男学生的 VFP 成绩。 (4)将学生表按入学成绩降序排序且显示。 (5)查询姓王的学生自然情况。 (6)统计性别为女的学生人数。 (7)统计男生,女生的平均入学成绩。 (8)查询入学成绩最高分的学生自然情况。 3.用学生数据库建立一个查询,选定字段自定。 4.用学生数据库建立一个视图,选定字段自定。 第4章 查询与视图 4.1 查询的一般概念 4.1.1 查询 4.1.2 视图 4.1.3 SQL查询 4.2 SQL语句 4.2.1 SELECT查询语句 4.2.2操作功能(插入、更新、删除) 4.2.3定义功能 4.3查询 4.3.1建立查询 4.3.2执行查询 4.3.3查询设计器的局限性 4.4视图查询 4.4.1建立本地视图 4.4.3视图与更新 4.4.4运行视图 4.5小结
本文档为【第4章 查询与视图】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_970938
暂无简介~
格式:pdf
大小:482KB
软件:PDF阅读器
页数:23
分类:互联网
上传时间:2011-05-22
浏览量:4