第4章 查询和视图Word格式.docx
《第4章 查询和视图Word格式.docx》由会员分享,可在线阅读,更多相关《第4章 查询和视图Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
4.2.利用查询设计器创建查询
例1:
基于成绩表(cj)查询成绩在80分以上(含80分)的学生学号,课程代号,成绩,且要求查询结果按照课程代号升序排序,课程代号相同时按照成绩降序排序。
查询设计器
方法1:
从文件菜单或工具栏上单击新建→查询→新建文件→进入查询设计器
方法2:
当所用的数据表已在项目中时,从项目管理器窗口中单击数据→查询→新建→新建查询→进入查询设计器
方法3:
从命令窗口中输入命令:
createquery查询文件名&
&
创建新查询
modifyquery查询文件名&
修改已存在的查询
利用查询设计器创建查询的步骤:
1.向查询设计器中添加数据源并设置联接条件
自由表,数据库表,视图,或其中的组合
2.定义查询的输出字段(内容)
a)需要输出的字段存在可用字段列表框中,则可以选择字段添加;
b)如果输出的字段不是直接来源于表中的字段,可以定义与之相关的函数或表达式并添加;
注意:
定义新的字段名的添加方法:
as新的字段名
3.设置查询的筛选条件:
通过设置筛选条件,可以对数据源中的记录进行筛选(即定义记录子集)在筛选框中构造筛选条件表达式时,要注意在实例框中输入不同数据类型时的格式:
字符串可以不带引号(当与源表中的字段名相同时才用引号);
日期型数值要用{}括起来;
逻辑型数据两侧要带.号,如.T..F.
举例:
查询工号开头字母为A的教师。
1)ghlikeA%
2)substr(gh,1,1)==/=/likea
3)between(substr(gh,1,1),a,a)
注意大小写的区别(补充函数UPPER(),LOWER())
4.设置查询结果的排序依据
排序决定查询输出结果中记录显示的顺序。
单击排序依据→从选定字段框选中字段→选择升序或降序→单击添加。
例2:
基于课程表(kc)和成绩表(cj),查询每门课程的选课人数,平均成绩,最高分和最低分,查询输出字段包括课程代号,课程名,选课人数,平均成绩,最高分,最低分,且按照平均成绩降序排序。
5.设置查询结果的分组依据
所谓分组,是指对表中记录取重复值的记录进行压缩,形成一个结果记录,目的是为了完成基于该结果记录的计算或统计,对每一组记录进行求平均值、求和、统计个数、最大值、最小值等。
几个常用的统计函数
功能
求平均值
求总和
求最大值
求最小值
统计个数
名称
AVG()
SUM()
MAX()
MIN()
COUNT()
用于分组的字段不一定是选定输出的字段,但分组字段不能是一个计算字段。
如果在分组的基础上,还需对查询结果进行记录筛选,即取查询结果记录的子集,可以使用分组依据中的“满足条件”来对查询的结果进一步筛选。
6.对查询结果的杂项设置
可以排除查询结果中所有重复的行,并设置结果的记录范围。
All:
全部
前N个记录:
TOPN
前N%个记录:
NPERCENT
7.选择查询结果的输出类型
默认情况下,查询结果将输出在浏览窗口中,且其中的数据是只读的。
输出去向
说明
浏览
在浏览窗口中显示查询结果
临时表
将查询结果存储在一张临时命名的只读表中(curror)
表
将查询结果存储在一个表文件中(.DBF)
屏幕
在VFP主窗口或当前活动输出窗口中显示查询结果
报表
将输出送到一个报表文件中(.frx)
标签
将输出送到一个标签文件中(.lbx)
8.运行查询
在查询设计器打开的状态下,单击常用工具栏上的!
按钮或从查询菜单中选择运行查询。
其他情况下,可从项目管理器中选中查询文件并单击运行按钮,或从程序菜单中选择执行命令,或从命令窗口中输入:
DO查询文件名。
9.创建多表查询
✓多表查询:
当需要获取存储在两张或更多张表或视图中的信息时,需要将这些表或视图添加到查询中来,多张表可以是数据库表,自由表或视图的任意组合。
✓联接与联接条件:
a)联接:
指查询或视图的一个数据库操作,通过比较指定字段中的值联接两个或多个表或视图中的记录。
b)联接类型:
内联接:
两张表中仅满足条件的记录。
左联接:
表中在联接条件左边的所有记录,和表中联接条件右边的且满足联接条件的记录
右联接:
表中在联接条件右边的所有记录,和表中联接条件左边的且满足联接条件的记录
完全联接:
表中不论是否满足条件的所有记录。
✓创建多表查询:
举例:
在TEST项目中已存在查询chaxun,且在SJK中学生(xs)表包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)、系代号(xdh)和专业代号(zydh)字段,专业(zy)表含有专业代号(zydh)和专业名称(zymc)字段,按如下要求修改查询:
基于xs表和zy表查询“01”年级每个专业女生所占比例。
要求输出字段为:
zydh,zymc,年级,女生人数和女生所占比例,查询结果按女生所占比例从高到低排序(假定bjbh字段值的前二位表示年级)。
练习:
1、设计查询(8分)(2005sp01)
在TEST项目中已存在查询chaxun,且在SJK中包含一个名为XSCJST的视图,该视图中包含学生的学号(xh),课程代号(kcdh)、课程名(kcm)和成绩(cj)字段,另外在SJK的学生(xs)表含有学生的学号(xh)和所在班级编号(bjbh)字段。
按如下要求修改查询:
基于xs表和XSCJST视图表查询每个班课程代号为”01”的考试情况。
bjbh,kcdh,kcm,最高分,平均分,不及格人数,查询结果按bjbh的升序排序(注:
成绩低于60分为不及格)。
2、设计查询(8分)(2005sp02)
3、设计查询(8分)(2005sp03)
TEST项目中已经存在查询chaxun,且在SJK中包含一个名为JSST的视图。
该视图包括教师工号(gh)姓名(xm)、出生日期(csrq)、职称(zc)和系代号(xdh)字段;
在SJK的系名(XIM)表含有系代号(xdh)和系名称(ximing)字段。
基于JSST视图和XIM表查询每个系职称为“教授”的人数、平均年龄,要求输出字段包括:
xdh、ximing、zc、人数、平均年龄、查询结果按人数从高到低排序。
4、设计查询(8分)(2005sp04)
该视图包括教师工号(gh)、姓名(xm)、出生日期(csrq)、职称(zc)和系代号(xdh)字段,在SJK的工资(GZ)表含有教师工号(gh)、基本工资(jbgz)和综合津贴(zhjt)字段。
基于JSST视图和GZ表查询每个系各类职称基本工资、岗位津贴和综合津贴三项之和的最大值、最小值、平均值、要求输出字段包括:
xdh、zc,最大值、最小值、平均值,查询结果按xdh从高到低排序。
5、设计查询(8分)(2005sp05)
在TEST项目中已存在查询chaxun,且在SJK中学生(xs)表包含学号(xh)、姓名(xm)、性别(xb)、班级编号(bjbh)、系代号(xdh)和专业代号(zydh)字段,专业(zy)表含有专业代号(zydh)和专业名称()zymc)字段,按如下要求修改查询:
4.3.用SELECT-SQL命令创建查询
1SQL概述
SQL(StructuredQueryLanguage):
结构化查询语言,是关系数据库语言标准
VFP支持如下SQL命令:
◆Createtable–sql:
创建表结构
◆Altertable-sql:
修改表结构
◆Insert–sql:
插入(追加)一条新记录
◆Update-sql:
更新表中的记录
◆Delete-sql:
为记录添加逻辑删除标记
◆Select-sql:
指定查询条件并执行查询
2Select-SQL命令格式:
①SELECT表名1.字段名1[AS标题名1],表名1.字段名2[AS标题名2],…
②FROM数据库名!
表名1innerjoin[,数据库名!
表名2]On表之间的联接条件
③WHERE选定条件
④ORDERBY排序字段名1[ASC|DESC][,排序字段名2[ASC|DESC]]
⑤GROUPBY分组字段名
HAVING分组中的满足条件
⑥TOFILE文本文件|intotable|intocursor表文件名[toscreen]
在SELECT-SQL语句中使用INTO/TO来定向查询结果
输出去向类型
INTO子句示例
独立的表
IntoTableab1
数组
IntoArrayab2
IntoCursorab3
文本文件
ToFileab4
活动窗口
TOSCREEN
示例:
(1)基于教师表JS,查询所有教师的工号和姓名。
(2)基于学生表XS,查询学号以“04”开头的学生情况(输出所有字段)。
(3)基于成绩表CJ和学生表XS,查询有不及格课程成绩的学生的学号和姓名,且有多门不及格的学生只显示一次,并将查询结果保存到表ab2中。
(4)基于课程表KC和成绩表CJ,查询各门课程的选课人数,最高分,平均分,要求输出课程代码,课程名称,选课人数,最高分和平均分,结果按照平均分降序排序,并将查询结果保存到文本文件ab3中。
4.4创建视图
1视图的特点
(1)视图是数据库的一个组成部分,分为本地视图和远程视图,是基于表且可更新的数据集合,视图不以独立的文件形式保存;
视图兼有表和查询的特点虚表;
视图中的数据源表也称为“基表”。
(2)视图中的数据是可以更改的,它不仅具有查询