4.AVERAGE 总分 TO AV 5.INDEX ON 总分 TAG ZF DESC LIST FOR 性别=\女\6.SEEK 165
DISPLAY 学号,姓名,性别 7.SELECT 2
INDEX ON 学号 TO XH1 SELECT 1
INDEX ON 学号 TO XH2
SET RELATION TO 学号 INTO A
DISPLAY ALL 学号,姓名,性别,A.出生年月,A.通信地址 8.SELE 0
USE XSCJ SELE 0 USE XSDA
JION WITH XSCJ TO NEW FIELDS 学号,XSCJ.姓名,性别,出生年月 FOR 学号=XSCJ. 学号
2.4 查询和视图
2.4.1 复习提要与学习指导
1.掌握查询/视图设计器的使用,理解查询和视图字段、筛选、排序、分组的含义并掌
握其设置方法。
添加表:添加多张表时,注意添加的次序,主表——子表——主表(如果是数据库表, 则事先应打开该表所属的数据库)。
可添加的数据源表:自由表、数据库表、视图(注意:不能为查询)。 字段:设定输出字段
字段表达式 AS 字段标题 或 字符常量 AS 字段标题 如果是字符常量,则表示该字段全部填充该常量的值。例如,\优秀\等级 字段表达式:销售数量*零售价 AS 销售总额
统计函数的使用: 计数:COUNT(*),参数可以为星号或者任意输
出字段名。 求和:SUM(),参数可以是一个或多个数值型字段的表达式。 求平均值:AVG(),参数同 SUM()。 求最大值:MAX()。 求最小值:MIN()。
注意
输出字段中如果有统计函数,则一般有分组依据,按分组依据形成多条 记录;如不设定分组依据,则整个表将合并成一条记录。
第二部分 《Visual FoxPro 程序设计(第二版)》复习提要与学习指导、习题及参考解答 107
108 Visual FoxPro 程序设计实训与考试指导(第二版)
可以用星号表示输出表中所有字段。例如: Select * From stud!xs Where xb=\男\连接条件: 基于单张表的查询不需要考虑连接条件:
FROM stud!xs INNER JOIN stud!cj;
INNER JOIN stud!kc ; ON Cj.kcdh = Kc.kcdh ;
ON Xs.xh = Cj.xh; 注意:表和连接条件之间的对应关系 筛选
(Where):直接从表中选出满足条件的记录;有时还可用来建立表之间的连接。 条件类型:
LIKE:表示以什么开头或结尾 js.gh LIKE a LEFT(CSTR,N):从 CSTR 变量的左边开始取 N 个字符。 RIGHT(CSTR,N):从 CSTR 变量的右边开始取 N 个字符。 SUBSTR(CSTR,NSTART,NLEN):从 CSTR 变量的 NSTART 开始取 NLEN 个字符。 BETWEEN:表示在什么和什么之间。
CSRQ BETWEEN 01/01/81,12/31/82
也可以用逻辑运算符连接两个关系表达式来实现。例如: CSRQ>={01/01/80} .AND. CSRQ<={12/31/82} IN:表示在某个范围之内。 函数 inlist(变量,值的列表)
例如:inlist(len(alltrim(xs.xh)),6,8,10):学号字段的长度只能为 6、8、10。
SELECT * FROM xs WHERE xs.xh IN(SELECT DISTINCT cj.xh FROM cj):输出在成绩 表中有成绩的学生的信息。
MODI COMM CHAXUN1.QPR
实例文本框中应注意:①字符串不需加引号,除非和字段名同名;②日期不需加花括 号,但日期的格式必须满足 Visual FoxPro 系统的日期格式(月/日/年);③逻辑值必须按标 准形式(.T.,.F.);④不能用 M 或 G 型字段做选定条件;⑤不等于的表示:实际是相等情况 的取反(选定条件前面的“否”按钮)。
排序(ORDER BY):默认是按升序。注意字段列表的先后顺序影响排序结果,按多个 字段排序,不能用表达式,只需要将字段按次序列出,中间用逗号分隔,而且必须给出每个 字段的顺序(ASCE(升序,可省略)、DESC(降序))。
例如:按性别降序排序,性别相同按姓名升序排序。
例如,ORDER BY xb DESC,xm:如果姓名按降序,则也必须给定 DESC,不能省略。 分组(GROUP BY):分组依据。肯定是输出字段,但不能是通过计算得到的数值输出 字段。 不能使用的:SUM(CJ.CJ)、COUNT(*);可以使用的:LEFT(XH,2)。 分组依据可以
是一个字段,也可以是多个字段。 满足条件(HAVING):表示在查询结果的基础上进行的再次筛选,表达式中的字段不 是表中的原始字段。
例如:输出平均分在 75 分以上的学生名单
与筛选条件(WHERE)的区别:WHERE 表示可直接利用表中的字段或经过函数简单 处理来形成的条件。
杂项(TOP N PERCENT;DISTINCT):查询结果的范围。 例如:查询输出总分的前 3 名:
首先 结果按总分的降序排序,然后设置 取前 3 条记录(TOP 3) DISTINCT:表示忽略查询结果中的重复记录,重复记录只显示第一条 运行查询:查询文件中保存的是查询的命令
DO 查询文件名.QPR (扩展名不能省略)
选择查询的输出类型(INTO | TO): 默认的输出类型:浏览窗口
其他形式:INTO 自由表 TABLE、临时表 CURSOR、数组 ARRAY
(输出的字段数以及记录数决定数组的形状)
TO 报表 REPROT、标签 LABEL、屏幕 SCREEN、打印机 PRINT 2.掌握 SQL 语句尤其是 SELECT-SQL 语句的使用。
SELECT DISTINCT TOP N (PERCENT)输出字段列表(注意 * 的作用) FROM 数据源表 1 [INNER JOIN 数据源表 2 ON 连接条件]
[WHERE 筛选条件 (注意:多个条件表达式需用逻辑运算符连接)] [GROUP BY 分组依据] [HAVING 满足条件]
UNION
SELECT DISTINCT TOP N (PERCENT)输出字段列表 (注意:必须与前一查询的输出 列表一致)
FROM 数据源表 1 INNER JOIN 数据源表 2 ON 联接条件 WHERE 筛选条件 GROUP BY 分组依据 HAVING 满足条件
[ORDER BY 排序依据] (注意:依据可以是字段名或字段序号;它是对查询的最终结 果进行排序)
最后的 ORDER BY 对上两个查询的结果都有效。 学习时,注意把查询/视图设计器与 SELECT-SQL 命令相比较:设计器中的每一个设置 都是与 SELECT 命令中的子句或选项一一对应的。在使用设计器创建、修改查询和视图时, 可以通过菜单或工具栏立即查看 SQL 命令,通过比较,既有利于命令的记忆,又有利于对 设计器中操作的理解。
3.掌握用视图设计器设计本地视图的方法。 视图的分类:本地视图、远程视图。
创建视图的命令:CREATE SQL VIEW 视图名 AS SELECT 语句
注意
视图不以文件的形式保存,而是保存于数据库文件中。 第二部分 《Visual FoxPro 程序设计(第二版)》复习提要与学习指导、习题及参考解答 109
110 Visual FoxPro 程序设计实训与考试指导(第二版)
更新条件:(视图设计器区别于查询设计器的地方)。
设置关键字段:每个需修改数据的表中都必须设定;如果表中没有设置关键字段,则表 中的数据不允许修改及更新;关键字段设置的目的是为了防止更新冲突及出现重复记录 选定需要修改的字段: 使表可更新:选定发送 SQL 更新(SENDUPDATE);它是决定视图中修改的数据是否 反映到基表中去的一个开关。
参数化视图:实际上是筛选条件不确定的一种视图 需要注意条件实例的表示:?参数名 设置视图参数:实际上是确定视图参数的类型。 视图的使用:注意视图的打开与查询的打开不同。 视图是一张虚表,它的打开方式同表:USE 视图名
(注意:视图打开前,必须打开它所属的数据库) 视图的修改
和重命名:MODIFY VIEW 视图名 (此命令将打开视图设计器) 视图字段属性的设置:视图的输出字段 可以设置类似于数据库表的扩展属性 可在字段选项卡中,点击属性按钮;(注意:查询设计器不具有该按钮) 4.掌握查询和视图的概念、区别与联系。
联系 区别 查询 视图(本地) 都是检索数据的方法。查询是检查存储在表中的特定信息的一种结构化方法,视图是特殊的查 询;本质上都是 SELECT-SQL 命令;具有相同的数据源类型和输出类型,查询和视图设计器也基 本相同 存储 处理结果 SELECT-SQL 命令存储为 QPR 查询文件 查询结果为只读的数据 用 DO 命令运行 SELECT-SQL 命令存储在数据库中 可以更新查询结果中的基表记录数据 可以当作表用 USE 命令打开 使用 单独作为组合框、列表框的一种数据行源 作为作为组合框、列表框的一种数据行 类型(RowsourceType):“查询” 源时,与表一样为“别名”类型
有关数据库、表、视图、查询的关系结构见下图。
查询 1 查询
查询 2 查询 3 查询 4 数 视图
视图 1 视图 2 视图 3
基表
库表 1 库表 2 库表 3 自由表 1 自由表 2 自由表 3