1、 Vfp 课件重点总汇 46 章 第四章 查询和视图 4.1 本节重点 : 什么是查询? 什么是视图? 查询和视图的区别? 1.查询 查询是向一个数据源发出的 检索信息 的请求,它按照一些条件提取特定的数据,其运行结果是一个动态的数据集合。 创建查询必须基于一定的数据源, 数据源 可以是 自由表 ,数据库表 ,或者是 视图 ,数量上,也可以是一张或多张。 用查询设计器创建,最终创建的查询是保存在以 .QPR 为扩展名的查询文件中的,其内容就是实现检索要求的 SELECT 语句。(不是查询结果 ,而是 实现查询的SELECT 语句 ) 查询文 件可多次运行,运行的结果是一个基于表或视图的 动态数
2、据集合 。如果不保存为查询文件而只是执行一个 SELECT 命令,则自动会以浏览窗口方式将查询结果显示出来一次。 2. 视图 视图是数据库的一个组成部分,是基于表的且可更新的数据集合(相当于一张 虚表 )。视图并 不产生一个磁盘文件 ,而是保存在数据库中的一个 定义 。 3. 两者区别 查询是从 表中检索 或统计出所需数据,而视图不仅具有查询的功能,而且可以改变视图中数据并把 更新结果 送回到源表中。 查询以 独立的文件存储 ( .QPR), 视图 不以独立的文件存储,当视图所在的数 据库被删除时,视图也不存在了。而查询和数据库没有这样的关系。 系统自动将其名称及其定义信息存储在 数据库 中。
3、 可以基于视图建立查询及视图,但是不能基于查询建立查询及视图。 运行查询 的命令: DO 查询名 .qpr ,而 打开视图 的命令: USE 视图名 4.2 本节重点 : 使用查询设计器创建? 查询设计器各个选项卡的设置? 1. 例 4.1 查询成绩在 80 分以上(含 80 分)的课程代号、课程名、学生号和成绩,且要求结果按课程代号升序排序,课程相同时按成绩的降序排序。 ( 1)打开查询设计器 “文件 ”菜单 “新建 ”“查询 ”“新建 ” 在 “项目管理器 ”中 “查询 ”“新建 ” create query 打开 “查询设计器 ” 在新建查询时,系统会打开 “添加表或视图 ”对话框,添加
4、查询所基于的数据源(表或视图)。若添加的表为多张表,则系统自动弹出 “联接条件 ”对话框,设置多表之间的联接。 2. 查询设计器分为上、下两个区域,上半部分为 数据源显示区 ,下半部分为 查询设置区 。 查询设置区的六个选项卡: 字段:用于设置查询的输出字段。 联接:指定联接表达式,用它来 匹配 多个表或视图中的记录 筛选:设置查询条件,对数据源中的记录进行 筛选。 排序依据:设置查询结果的显示顺序。 分组依据:用于 生成分组查询 (类似于 Excel 中分类汇总 的分类字段)。 杂项:对查询结果的输出作 限制 。( 是否保留重复记录 等) ( 2)输出字段 在 “字段 ”选项卡中, “可用字
5、段 ”列表框给出了当前可用的字段(即数据源的所有字段); “选定字段 ”列表框则显示用户设置的 查询输出的字段 ,其 顺序 决定 查询输出字段的顺序 查询的输出项可以来自数据源表中原有字段,也可以是通过定义关于字段的函数或表达式计算出的内容。另外还可以用 AS 引入别名作为输出项的 列标题 ,如: ks.kcmc As 课 程名称等 。 ( 3)设置筛选条件 使查询结果只检索符合用户需求(筛选条件)的记录。筛选条件是对满足联接条件的数据的第一次限定,对应于 SELECT 命令中的 WHERE 子句。 在 “筛选 ”选项卡中, “字段名 ”表被筛选字段; “否 ”表示条件取反 ; “条件 ”允许
6、使用的比较符有: =、 Like、 =、 、 =、(指定 输出字段 ) FROM 数据库名 !(即数据源 ) INNER|LEFTOUTER|RIGHTOUTER|FULLOUTER JOIN 数 据 库名 ! 表名 ON (确定 连接类型 )共四种 WHERE (数据记录的 筛选 ) GROUP BY (定义 记录的分组 ) (分组依据及满足条件) HAVING ( 筛选结果 记录) ORDER BY ASC|DESC (指定 结果的顺序 ) UNION ALL INTO ARRAY 数组名 | INTO CURSOR 表名 |INTO DBF 表名 |INTO TABLE 表名 |TO F
7、ILE 文件 名 (查询去向) ADDITIVE|TO PRINTER PROMPT|TO SCREEN(指定有无重复记录和指定结果的输出范围,统称为杂项) 4.3.2 参数说明: 具体见书 122 简单说明: Alias 表别名 into destination 指定查询结果保存在何处( Array name 将查询结果保存在内存变量数组中, cursor 保存到临时表中, dbf 保存到一个表中) additive 使得查询结果追加到所指定的文本文件中 ( 1) ALL:输出所有查询得到的 行 ,可以省略; ( 2) DISTINCT:重复的结果 只显示一次 ; (就是无重复结果) ( 3
8、) TOP 表达式:输出结果中的前几条记录,或输出结果的百分之多少的记录; ( 4)目标列表达式: (输出各列间用 “,”隔开。 ) 字段:可以是某个表的字段,如果是两个表都有的字段,要把该字段所属的表名也表示出来,例如: xs.xh, xm, xb,此处写 *表示 所有字段 。 合计函 数表达式: Count()、 Sum()、 Avg()、 Max()、 Min() Count( ):学生人数、教师人数、课程门数等,这时统计的是满足条件的 记录数 ,即将表中的行进行数数,用 Count(*) 没有条件限制; Sum( ):对某个数值型字段求和,如对 CJ 求和得到总成绩,对 XSL 求和得
9、到总销售量,对 XF 求和得到总学分,对 JBGZ求和得到工资总额等: Sum(CJ)、 Sum(XSL)、Sum(JBGZ) Avg( ) :对某个数值型字段求平均值,如对 CJ 求和得到平均成绩: Avg(CJ) Max( )、 Min( ):对某个字段求最大值、最小值(一般指数值型的字段) 其它函数表达式:例如: Left(xh,2) As 年级、 Year(Date( )-Year(csrq) As 年龄 等 字符串常量:在输出结果中该列将以字符串的内容为结果 说明:一般要给这些函数 指定列标题 ,用 As 短语实现 ,例如: Sum(cj.cj) As 总分 ( 5) FROM 子句
10、:指定查询结果的数据来源,即 数据源 。 ( 6) 数据库 !表名 :如果 数据源是非当前数据库中的表 ,则就用这种方式表示。数据源可以是表,也可以是视图,但 不能是 查询 。 ( 7)联接类型:内联接、左联接、右联接、完全联接 ( 8) ON 联接条件 在基于多表查询时,要建立联接条件。若两张表有同名字段,则,用 =将同名字段联接;若没有同名字段,但有字段含义相同的字段,则将含义相同的字段用 =联接;若没SELECT-SQL 命令 定义 数据源 指定 数据源 表 FROM子句 确定源表间的 联接 JOINON 子句 定义 结果 筛选源表 记录 WHERE子句 指定 输出字段 字段、函数和表达
11、式的列表或 * 指定 输出类型 INTO子句和 TO子句 定义记录的 分组 GROUP BY子句 指定 结果顺序 ORDER BY子句 筛选结果 记录 HAVING子句 指定有 无重复 记录 ALL/DISTINCT 指定结果的 范围 TOP n|TOP n PERCENT 有同名字段,并且也 没有 含义相同的字段,则要用 函数表达式 。 ( 9)联接条件书写另一种位置:也可以不放在 FROM 子句里,而是放在 WHERE 子句 中(直接将联接条件写在其中)。注意:把联接条件下放到 WHERE 子句里 时联接类型就 只能是 内联接 ,不能指出其它联接类型。如果 需要 指定 的话,则要将联接条件
12、放在 JOIN 子句中。 ( 10) WHERE 条件表达式 是对数据源中的字段筛选 指定筛选条件 。如果条件表达式是一个 SELECT-SQL 命令,则该查询就是 子查询 。 书 123 ( 11) GROUP BY 分组依据 ( 该子句是用于分组。 ) 为什么要分组呢?分组就将某个字段具有相同值的记录分别放在不同的组中,然后对每组记录进行 “压缩 ”,也就是统计个数、求和、求平均值、求最大、最小值,结果每组记录就被压缩成了一条记录。需要注意的是分组依据不同,分的组的个数不同,由于每组对应一条记录,最后输 出结果的记录数也不同 。 如果不能深刻理解上面内容,可以用简单的方法:只要记住: “在
13、前面只要用到合计函数( Sum、 AVG、 Max、 Min、 Count)中的任何一种,百分之九十九 一定要分组。 ” 有一种情况 例外 , 统计 是要对 所有记录进行 ,即将数据分成一组。 具体对应分组的简单方法:分组的依据要看使用合计函数的字段的定语。例如统计学生表中各系的人数,人数使用合计函数 Count( ),而人数的定语为各系,则各系就是以 xdh(系代号)区分,分组依据为: xdh。 在书写分组依据时,如果是很长的表达式,可以用数字代替, 这里的数字代表着查询结果中输出的第几列。 ( 12) HAVING 条件表达式 这里的条件是 对查询结果进行筛选 , 要和 WHERE 子句区
14、分 开来。一般是对计算字段的筛选,例如总分、工资总额、人数等。 ( 13) ORDER BY 排序依据 对 查询结果进行排序 ,排序依据也可以用数字代替,多个排序依据用 “, ”隔开。 ASC为升序, DESC 为降序,缺省为升序 。 ( 14) UNION 组合查询,即将两个查询结果并在一起 ( 15) INTO|TO 子句设置查询结果的输出去向。 4.3.3 1. 基于单张表的查 询示例 例 4.4 显示 js 表中所有教师的工号和姓名。 SELECT js.gh, js.xm FROM jxsj!js 例 4.5 显示 xs 表中学号以 “04”开头的学生情况。 SELECT * FRO
15、M jxsj!xs WHERE LIKE(“04*”,xh) ( *号表示一类数据) 例 4.6 查询成绩表 CJ 中课程代号为 “60001”的学生的学号和成绩,且要求查询结果按成绩降序排列。 SELECT cj.xh,cj.cj FROM jxsj!cj; WHERE cj.kcdh=“60001”; ORDER BY cj DESC(升序为 ASC) 2. 基于 多张表 的查询示例 例 4.7 基于学生表 xs 和院系专业表 yxzy,查询学生的学号、姓名和专业名称。 SELECT xs.xh,xs.xm,yxzy.zymc; FROM sjk!xs,sjk!yxzy; WHERE xs
16、.yxzydm=yxzy. yxzydm 【 SELECT xs.xh,xs.xm,yxzy.zymc; FROM sjk!xs inner join sjk!yxzy; ON xs. yxzydm =yxzy. yxzydm 】 例 4.8 基于成绩表 cj 和学生表 xs,查询有不及格课程成绩的学生的学号和姓名,且有多门课程不及格的学生 只显示一次 。 SELECT DISTINCT cj.xh,xs.xm; FROM sjk!cj,sjk!xs; WHERE cj.cj60 AND cj.xh=xs.xh 3. 含有计算字段的查询 例 4.9 基于成绩表 cj,查询各门课程的最高分 ,要
17、求输出课程代码及最高分中课程代号及最高分。 SELECT cj.kcdm,MAX(cj.cj) AS 最高分 ; FROM sjk!cj; GROUP BY cj.kcdm 例 4.10 基于成绩表 cj 和课程表 kc,查询每门课程的课程代码、课程名称、人数、平均分、最高分和最低分,并把查询结果保存到 kc _maxcj 表文件中。 SELECT cj.kcdm AS 课程代码 , kc.kcm AS 课程名称 ,; COUNT(*) AS 人数 , AVG(cj.cj) AS 平均分 ,; MAX(cj.cj) AS 最高分 , MIN(cj.cj) AS 最低分 ; FROM sjk!c
18、j,sjk!kc; WHERE cj.kcdm=kc.kcdm; GROUP BY cj.kcdm; INTO TABLE kc_maxcj 4. 子查询示例 例 4.11 显示教师表 js 和任课表 rk,查询已担任课程的教师的姓名和系名。 SELECT xim.ximing,js.xm; FROM sjk!js INNER JOIN jxsj!xim; ON js.xdh=xim.xdh; WHERE js.gh IN (SELECT rk.gh FROM sjk!rk) 5. 组合查询示例 例 4.12 基于教师表 js 和学生表 xs,查询全校师生名单,要求输出字段为:系名、类别(是教
19、师还是学生)、姓名和性别,并按系名排序。 SELECT Xim.ximing AS 系名 ,教师 AS 类别 ,; Js.xm AS 姓名 ,Js.xb AS 性别 ; FROM Js,xim WHERE Js.xdh=Xim.xdh; UNION; SELECT Xim.ximing AS 系名 ,学生 AS 类别 ,; xs.xm AS 姓名 ,xs.xb AS 性别 ; FROM xs,xim WHERE xs.xdh=Xim.xdh; ORDER BY 1 4.4 本节重点 : 什么是视图?视图与数据库的关系? 视图的创建方法? 参数化视图的创建方法? 视图的打开、关闭? 视图是数据库
20、的一个组成部分,是基于表的且 可更新 的数据集合(相当于一张 虚表 )。 视图是从一个或多个数据表中导出 的 “表 ”。视图是 不能单独存在 的,它是 依赖 于某一 数据库 而存在的。只有打开与视图相关的数据库才能创建和使用视图。视图可以增强数据的共享性和安全性。由于数据库中数据的来源不同,视图可分为 本地视图 和 远程视图 。 视图中的源数据表也称为“基表”。 1.使用视图设计器 在 “项目管理器 ”中,选择数据库中的 “本地视图 ”,选择 “新建 ”按钮,则打开 “视图设计器 ”,该设计器与查询设计器类似,只是比查询设计器多了一个 “更新条件 ”选项卡。 2. 使用 CREATE SQL
21、VIEW 命令 creat sql view 视图名 as sql-select 语句 例: creat sql view xs_view as select * from aa!xs csql=”select * from aa!js” creat sql view js_view as &csql 4.4.2 1.使表可 更新 首先要 设置 “主关键字 ”,才能设置 “可更新字段 ”,最后别忘了 选择 “发送 SQL 更新 ”。 =DBSETPROP(“视图名 ”,“ View”,”“ send updates” ,.t.) 2. 设置关键字段 关键字段是唯一的标识那些已 在本地修改过的表
22、中的更新记录。 ( 1)指定可更新字段 如果设置给定表中部分或全部字段允许更新,必须在该表的所有字段中设置一个 关键字段 。 ( 2)控制如何检查更新冲突 “冲突 ”与否是由视图中的旧值和原始表的当前值之间的比较结果决定的(由系统进行比较)。如果两个值相等,则认为原始值未做修改,不存在冲突;如不相等,则存在冲突。 命令见书 128 4.4.3 参数化视图可用来限定视图的作用范围,而使用参数化视图可以避免每取一部分记录就需要单独创建一个视图的情况。只要在 SQL-SELECT 语句中加一条 WHERE 子句即 可。 例 4.14 基于 cj 表创建一个参数化视图,根据提供的课程代号下载该课程的成
23、绩。 注:参数的类型一定要和选择的字段类型相符,也就说输入的类型要和字段类型相一致。书 129 4.4.4 1.访问视图 处理视图类似于处理表 使用 USE 命令并指定视图名来打开一个视图 使用 USE 命令关闭视图 在 “浏览 ”中,显示视图记录 在 “数据工作期 ”窗口中显示打开的视图 在文本框、表格控件、表单或报表中使用视图作为数据源 ( 1)视图的打开、浏览与关闭 如: OPEN DATABASE jxsj USE myview BROWSE USE 使用视图前,应先打开视图所在的数据库。 一张 视图 在使用时,将作为 临时表 在 自己的工作区 中打开。如果此视图基于 本地表 ,则在其
24、它工作区中同时打开 基表 ;如果此视图基于远程表,则基表不在工作区中打开,而只在 “数据工作期 ”窗口中显示远程视图的名称。 关闭视图时,基表不会自动关闭。 关闭数据库时,数据库中的表和视图都会自动关闭 ( 2)显示视图结构 如: USE myview NODATA SELECT myview BROWSE 2. 视图的修改、重命名与删除 如: RENAME MYVIEW TO NEW_VIEW 注:在重新命名视图前,必须先 打开 要改名的视图。 如: DELETE VIEW MYVIEW 注:在删除视图前,必须先 打开 视图所在的数据库并设置其为 当前数据库 。 用数据字典定制视图和集成视图
25、见书 130 第五章 程序设计基础 程序设计概述 结构化程序设计 面向对象的程序设计基础 5.1 本节重点: 程序设计的概念 程序设计的方法 面向对象程序设计的特性 程序设计:利用系统所提供的设计工具,按照程序设计语言的规范描述解决问题的算法并进行程序编写的过程。 程序设计方法:结构化程序设计( SP)和面向对象的程序设计( OOP)。 结构化程序设计 遵循四条原则:自顶向下、逐步求精、模块化和限制使用转移语句。 程序流程使用三种基本结构来控制:顺序、分支和循环。 本质:以功能为主进行设计,其方法是自顶向下、功能分解,它从外部功能上模拟客观世界,其开发过程通常是从 “做什么 ”到 “如何做 ”
26、。 优点:系统结构性强、便于设计和理解。 面向对象的程序设计 基本思想:世界由各种对象组成,任何事物都是对象,是某个对象类的实例,复杂的对象可由较简单的对象组合而成。 基石:对 象和类。 对象:是数据及作用于这些数据之上的操作结合在一起所构成的独立实体的总称。 类:一组具有相同数据结构和相同操作的对象的描述。 OOP 特性: 封装性:指对象是数据和处理该数据的方法所构成的整体,外界只能看到其外部特性,其内部特性对外不可见。 继承性:反映的是类和类之间不同的抽象级别,根据继承与被继承的关系,类可分为基类和衍生类,基类也称为父类,衍生类也称为子类。 多态性:在形式上表现为一个方法根据传递给它的参数
27、的不同,可以调用不同的方法体,实现不同的操作。 OOP 优点: 再现人类认识事物的思维方式和解 决问题的工作方式; 能尽量逼真地模拟客观世界及其事物; 很好地实现了信息隐藏,由此建立在类及其继承性基础上的重用能力可应付复杂的大型软件开发。 5.2 本节重点: 顺序结构 分支结构( IF ELSE ENDIF、 DO CASE ENDCASE) 循环结构( FOR ENDFOR、 DO WHILE ENDDO、 SCAN ENDSCAN) 过程与用户自定义函数 结构化程序设计是指根据不同的情况和条件,控制程序去执行相应操作的语句序列。 VFP 中程序结构主要分为:顺序结构、分支结构、循环结 构,
28、以及过程 /函数调用,且这些结构可以相互嵌套,即一种程序结构中可包含任何的程序结构。一个程序从总体上来说是一个顺序结构,其中的某个(些) “子部分 ”则可能是各种结构的组合和嵌套。 5.2.1 1.创建和修改程序文件 ( 1)创建程序 “文件 /新建 ” “常用 ”工具栏中的 “新建 ” 利用项目管理器中的 “新建 ” 命令 MODIFY COMMAND FileName|? ( 2)修改程序 “文件 /打开 ” “常用 ”工具栏中的 “打开 ” 利用项目管理器中的 “修改 ” 命令 MODIFY COMMAND 注: .bak 文件是备 份文件,当一已存在的程序对其个修改后保存,则修改前和程序以 .bak2. 2.运行程序 “常用 ”工具栏的 “! ” 项目管理器中 “运行 ”按钮 DO 命令 DO 程序文件名 WITH 参数 文件保存。 5.2.2 顺序结构,是指程序运行时按照语句排列的先后顺序,一条接一条地依次执行,程序的执行流程如图 5-1 所示,先执行语句 A,然后执行语句 B。它是程序中最基本的结构,也是任一程序的主体结构。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。