兰州西北师大附中地址:VFP中的查询(query)

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 14:37:35

VFP中的查询(query) 发布日期:2010/5/2 10:24:00 来源: 作者: 点击:1039

 

-
 一.查询:所谓查询,就是从数据库的一个表或关联的多个表中,检索出符合条件的信息,并可对查询结果分组或排序存储于指定的文件中.查询文件的扩展名为.qpr.查询只能从表中提取数据,但不能修改数据.如果既要查询数据,又要修改数据,可使用视图.
二.查询的创建:创建查询的方法有三种:一是使用查询向导,二是使用查询设计器,三是直接编写select-sql语句.不管用查询向导还是用查询设计器,其结果都是生成一条select-sql语句,在本质上是select-sql命令的可视化设计方法.我们这里介绍使用查询设计器创建查询.
1.使用查询设计器创建查询的基本步骤:
(1).启动查询设计器
(2).添加表
(3).设置表间关联
(4).选择显示字段
(5).设置筛选记录条件
(6).排序,分组查询结果
(7).设置查询输出类型
2.启动查询设计器:
(1)在项目管理器中选择"数据"或"全部"选项卡,选择"查询"文件类型,然后单击"新建"按钮,单出"新建查询"对话框,如图52


(2)在"新建查询"对话框中单击"新建查询"按钮,弹出"查询设计器"窗口,如图53所示


3.查询设计器介绍:
(1)数据环境:查询设计器的上半部分是数据环境显示区,用于显示所选择的表或视图,可右击其空白处,选"添加表"或"移动表"命令向数据环境添加或移动表.如果是多表查询,还可在表之间可视化的连线建立关系.
(2)"字段"选项卡:在"查询设计器"中,选择"字段"选项卡, 在"可用字段"列表中列出了查询数据环境中选择的数据表的所有字段;在"选定字段"框中设置在查询结果中要输出的字段或表达式;"函数和表达式"框用于建立查询结果中输出的表达式."选定字段"框中行的顺序就是查询结果中列的顺序.
在"可用字段"框和"选定字段"框之间有4个按钮:"添加","全部添加","移动"和"全部移动"按钮,用于选择或取消选定字段.
在"函数和表达式"框中,可以用来输入一个表达式,或单击"…按钮,打开"表达式生成器"对话框,生成一个表达式,单击"添加"按钮,表达式就出现在"选定字段"框中.还可以给选定的字段或表达式起一个别名,方法是在"函数和表达式"框中字段名或表达式后输入"AS 别名",查询结果中就以别名作为该列的标题.
例如,在"职工档案"表中有出生时间字段,为了输出年龄,可以在"选定字段"框中加入下列表达式:
year(date())-year(职工档案!出生时间)+1 AS 年龄
在该表达式中,用当前系统日期的年份减去出生时间的年份,得到了职工的年龄,并给该表达式起了一个别名"年龄"
(3)"联接":进行多表查询时,需要把所有有关的表或视图添加到查询设计器的数据环境中,并为这些表建立联接.这些表可以是数据表,自由表或视图.
当向查询设计器中添加多张表时,如果新添加的表与已存在的表之间在数据库中已经建立永久关系,则系统将以该永久关系作为默认的联接条件.否则,系统会打开"联接条件"对话框,并以两张表的同名字段作为默认的联接条件,如图54所示.


在该对话框中有四种联接类型:内部联接(inner join),左联接(left outer join),右联接(right outer join)和完全联接(full join),其意义下表.系统默认的联接类型是"内部联接",可在"联接条件"对话框中更改表之间的联接类型.

联接类型 说明
内部联接 两个表中的字段都满足联接条件,记录才选入查询结果
左联接 联接条件左边的表中的记录都包含在查询结果中,而右边的表中的记录只有满足联接条件时,才选入查询结果
右联接 联接条件右边的表中的记录都包含在查询结果中,而左边的表中的记录只有满足联接条件时,才选入查询结果
完全联接 两个表中的记录不论是否满足联接条件,都选入查询结果

两表之间的联接条件也可以通过"查询设计器"的"联接"选项卡来设置和修改,如图55所示


 

(4)筛选:查询既可查询所有记录,也可以查询所有满足条件的记录.指定选取记录的条件可使用"查询设计器"的"筛选"选项卡,如图56所示.

其中,"字段"名框用于选择要比较的字段;"条件"框用于设置比较的类型(见下表);"实例"框用于指定比较的值;"大小写"框用于指定比较字符值时,是否区分大小写;"逻辑"框用于指定多个条件之间的逻辑运算关系.如果用逻辑与运算符"AND"连接两个条件组成筛选条件,则只有同时满足这两个条件的记录才能出现在查询结果中;如果用逻辑运算符"OR"连接两个条件组成筛选条件,则满足这两个条件的任何一个的记录就能出现在查询结果中."筛选"中的一行就是一个关系表达式,所有的行构成一个逻辑表达式.

条件类型 说明
= 字段值等于实例值
like 字段值与实例值匹配
== 字段值与实例值严格匹配
>(>=) 字段值大于(或大于等于)实例的值
<(<=) 字段值小于(或小于等于)实例的值
is null 字段值为"空"值
between 字段值在某个值域内.值域由实例给出,实例中给出两个值,两值之间用逗号分开
in 字段值在某个值表中.值表由实例给出,实例给出若干个值,值与值之间用逗号分开.

 


图56

(5)排序依据:使用"查询设计器",可以对查询结果中输出的记录排序.例如,使查询结果按"出生时间"的先后顺序输出,或按"工资"的高低顺序输出.还可以使输出结果按多个字段排序输出.例如,查询结果选按部门排序,同部门的职工再按工资高低排序."排序条件"列表框中的顺序决定了排序的优先权.排序可以是升序,也可以是降序.在图57中设置的排序条件就是先按"性别"升序排序,同性别者按"工资"降序排序.


(6)分组依据:在"查询设计器"中还有一个"分组依据"选项卡.所谓分组即将一组类似的记录压缩成一个结果记录,以便完成这一组记录的计算.例如,在"职工档案"表中查询男女职工的工资总额,就可以按性别对表中的记录分组,然后求每一组记录中的工资总额.
(7)杂项:在"查询设计器"的"杂项"选项卡中,可设置一些特殊的查询条件,如图58所示.


●如果选择复选框"无重复记录",则查询结果中将排除所有相同的记录;否则,将允许重复记录的存在.
●如果选择复选框"交叉数据表",将把查询结果以交叉表格式传送给Microsoft Graph,报表或表.只有当"选定字段"刚好为3项时,才可以选择"交叉数据表"复选框,选定的3项代表X轴,Y轴和图形的单元值.
●如果选择复选框"全部",则满足查询条件的所有记录都包括在查询结果中.这是"查询设计器"的默认设置.只有在取消对"全部"复选框的选择的情况下,才可以设置"记录个数"和"百分比"."记录个数"用于指定查询结果中包含多少条记录.当没有选定"百分比"复选框时,"记录个数"微调框中的整数表示只将满足条件的前多少条记录包括到查询结果中;当选定"百分比"复选框时,"记录个数"微调框中的整数表示只将最先满足条件的百分之多少个记录包括到查询结果中.
(8)选择查询结果的去向:查询结果可输出到不同的目的地.在"查询去向"对话框中,根据需要可以把查询结果输出到下表中的不同的目的地.如果没有选定输出目的地,系统默认值为把查询结果显示在浏览器窗口中.

输出去向 说明
浏览 将查询结果显示在"浏览"窗口中
临时表 将查询结果存储在一张命名的临时表中
表 将查询结果保存在一张表中
图形 将查询结果用于Microsoft Graph应用程序
屏幕 将查询结果显示在VFP主窗口或当前活动窗口中
报表 将查询结果输出到一个报表文件
标签 将查询结果输出到一个标签文件


从"查询"菜单中选择"查询去向",或在"查询设计器"工具栏中单击"查询去向"按钮,屏幕上将出现"查询去向"对话框,如图59所示,在其中可选择一个去向.


 

三.生成SQL语句:不论是使用向导还是使用"查询设计器",其结果都是生成一条SQL语句.可以通过选择"查询"菜单(或者快捷菜单)中的"查看SQL"菜单项或单击"查询设计器"工具栏上的"SQL"按钮,即可看到所生成的select-sql语句.
一般情况下,用查询设计器创建查询的目的是通过交互设置,生成SQL命令,然后复制下来,粘贴到应用程序中或保存到查询文件中.如果对select-sql比较熟悉,完全可以不使用查询.
3.生成查询文件:查询创建完成后,单击"常用"工具栏上"保存"按钮或"文件"下的"保存"命令,输入文件名,比如Query1,系统自动为该文件加上扩展名.QPR,即生成了查询文件Query1.QPR.该文件中保存的是SQL语句.
四.运行查询:
(1).在项目管理器打开的情况下,选择查询文件,单击"项目管理器"上的"运行"按钮.
(2)在查询文件打开的情况下,单击"常用"工具栏上的"运行"按钮或"查询"菜单中的"运行查询"命令,即可运行查询.
(3)在命令窗口或应用程序中用DO命令运行查询,例如:do Query1.QPR
五.例一:查询男女职工人数,工资总额及平均工资,并按平均工资降序排序.查询输出必须包括性别,人数,工资总额和平均工资.
分析:本例按性别进行分组,即把所有性别相同的记录压缩成一个记录.利用count(),sum()和avg()函数可以对每一组记录进行计数,求和及求平均值.另外还有max()是求最大值函数,min()是求最小值函数.
1.新建一个查询,选"职工档案"表,在"查询设计器"对话框的"字段"选项卡中将下列字段和表达式设置到"选定字段"列表框中,如图60


向"选定字段"列表添加表达式"count(*) as 人数"的方法:在"函数和表达式"文本框中输入表达式"count(*) as 人数",然后单击右侧的"添加"按钮即可,如图61,

 

这里,给表达式"count(*)"起了一个别名"人数".
2.在"排序依据"选项卡中,选择"avg(职工档案.工资)"作为排序条件,设置为降序排序.
3.在"分组依据"选项卡中,把"可用字段"中的"职工档案.性别"字段添加到"分组字段"中.这样就完成了本例的查询要求.
4.如果在分组的基础上,还要对查询结果记录进行筛选,可以单击在"分组依据"选项卡中的"满足条件"按钮,打开"满足条件"对话框,例如输入"avg(职工档案.工资)<1000"

原文链接:http://airfire.banzhu.net/article/airfire-2-1279386.html