在需要迅速获得答案时,可以使用 Visual FoxPro 的“查询设计器”来检索存储在表和视图中的信息。例如,您可能想知道以下问题的答案:
使用“查询设计器”可以搜索那些满足指定条件的记录,也可以根据需要对这些记录排序和分组,并根据查询结果创建报表、表及图形。
本章介绍如何创建和使用基于表(.dbf 文件)或视图的简单的只读查询。有关使用多表本地查询或远程数据的内容,请参阅第六章“查询和更新多表”。有关创建视图的详细内容,请参阅第五章“使用视图更新数据”。
本章要点:
在很多情况下都需要建立查询,例如为报表组织信息、即时回答问题或者查看数据中的相关子集。无论目的是什么,建立查询的基本过程是相同的。
利用“查询设计器”,首先选择想从中获取信息的表或视图,指定从这些表或视图中提取记录的条件,然后按照想得到的输出类型定向查询结果,诸如浏览、报表、表、标签等等。若要保存创建的查询,可以给它指定一个名称,将查询文件保存为带 .qpr 扩展名的文件。
查询的设计过程
当确定了要查找的信息,以及这些信息存贮在哪些表和视图中后,可以通过以下几个步骤来建立查询:
若要快速创建查询,可以利用 Visual FoxPro“查询向导”。“查询向导”将询问您从哪些表或视图中搜索信息,并根据您对一系列提问的回答来建立查询。
有关“查询向导”的详细内容,只要在使用向导时按 F1 键就可以获得联机帮助。
若要用向导建立查询
您也可以从“工具”菜单中选择“向导”命令来启动向导。
如果不想使用“查询向导”,可以使用“查询设计器”建立查询。从“项目管理器”或“文件”菜单中,都可以启动“查询设计器”。
若要启动“查询设计器”
您也可以从“文件”菜单中选择“新建”来启动“查询设计器”,选择“查询”选项,然后选择“新建文件”。
在创建新查询时,系统会提示您是否从当前数据库或自由表中选择表或视图。
选择要查询的表或视图
选择了表或视图后,Visual FoxPro 将显示“查询设计器”窗口。
“查询设计器”窗口
不同的表或视图之间可以很方便地进行切换。
若要使用不同的表或视图
打开“查询设计器”,选择包含想要信息的表或视图后,就可定义输出结果。至少需要选择所需的字段,也可设置选定字段的显示顺序和设置过滤器来筛选需要显示的记录,以此定义输出结果。
在运行查询之前,必须选择表或视图,并选择要包括在查询结果中的字段。在某些情况下,您可能需要使用表或视图中的所有字段。但在另一些情况下,也许只想使查询与选定的部分字段相关,比如要加到报表中的字段。
如果想用某些字段给查询结果排序或分组,一定要确保在查询输出中包含这些字段。选定这些字段后,可以为它们设置顺序作为输出结果。
使用“查询设计器”底部窗格中的“字段”选项卡来选取需要包含在查询结果中的字段。
“查询设计器”中的“字段”选项卡
若要在查询输出中添加字段
– 或者 –
可使用名称或通配符选择全部字段。如果使用名字选择字段,查询中要包含完整的字段名。此时若向表中添加字段后,再运行查询,则输出结果不包含新字段名。
如果使用通配符,则通配符包含在查询中,并包含当前查询的表中的全部字段。如果创建查询后,表结构改变了,新字段也将出现在查询结果中。
若要在查询中一次添加所有可用的字段
– 或者 –
若要使查询结果易于阅读和理解,可以在输出结果字段中添加说明标题。例如,您可在结果列的顶部显示“SumMaxOrd”来代替字段名或表达式 SUM(MaxOrdAmount)。
若要给字段添加别名
SUM(maxorderamt) AS SumMaxOrd
在“字段”选项卡中,字段的出现顺序决定了查询输出中信息列的顺序。
设置输出的列顺序
若要改变查询输出的列顺序
如果想改变信息行的排序次序,请使用“排序依据”选项卡。
选取需要查找的记录是决定查询结果的关键。用“查询设计器”中的“筛选”选项卡,可以构造一个带有 WHERE 子句的选择语句,来通知 Visual FoxPro 想要搜索并检索的记录。
您可能需要查找一个特定的数据子集,并将其包含在报表或其它输出形式中。例如,所有要延期支付的顾客、在某个特定地区或具有特定邮编的所有顾客等等。若只想查看所需的记录,可以输入一个值或值的范围与记录进行比较。
在 Visual FoxPro 中,使用“筛选”选项卡可以确定用于选择记录的字段、选择比较准则以及输入与该字段进行比较的示例值。
定义查询结果的条件
若要指定过滤器
注释 通用字段和备注字段不能用于过滤器中。
若想对逻辑操作符的含义取反,请选择“否”下面的按钮。例如,您想查找除了华盛顿地区以外所有地区的顾客,可使用下面示例中的选择表达式:
Customer.region Not Like WA
若要更进一步搜索,可在筛选选项卡中添加更多的筛选项。有关的详细内容,请参阅本章稍后的“精确搜索”部分。
如果查询中使用了多个表或视图,按选取的联接类型扩充所选择的记录。有关详细内容,请参阅《程序员指南》中的第八章“创建视图”。
定义查询输出后,可组织出现在结果中的记录,方法是对输出字段排序和分组。也可筛选出现在结果中的记录组。
排序决定了查询输出结果中记录或行的先后顺序。例如,可以将州名列在城市名的前面,或以升序方式根据未付款额的大小对记录排序。
利用“排序依据”选项卡设置查询的排序次序,排序次序决定了查询输出中记录或行的排列顺序。
首先,从“选定字段”框中选取要使用的字段,并把它们移到“排序条件”框中,然后根据查询结果中所需的顺序排列这些字段。
若要设置排序条件
若要移去排序条件
字段在“排序条件”框中的次序决定了查询结果排序时的重要性次序,第一个字段决定了主排序次序。
例如,在“排序条件”框中的第一个字段是 Customer.region
,第二个字段为 Customer.city
,查询结果将首先以 Customer.region
进行排序,如果客户表中有多个记录具有同样的 region
字段值,这些记录再根据 Customer.city
进行排序。
用“排序依据”选项卡设置排序次序
为了调整排序字段的重要性,可以在“排序条件”框中,将字段左侧的按钮拖到相应的位置上:
通过设置“排序选项”区域中的按钮,可以确定升序或降序的排序次序。在“排序依据”选项卡的“排序条件”框中,每一个排序字段都带有一个上箭头或下箭头,该箭头表示按此字段排序时,是升序排序还是降序排序。
所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组记录的计算。例如,若想找到某一特定地区所有订货的总和,不用单独查看所有的记录,可以把来自相同地区的所有记录合成为一个记录,并获得来自该地区的所有订货的总和。若要控制记录的分组,可使用“查询设计器”中的“分组依据”选项卡。
分组在与某些合计函数联合使用时效果最好,诸如 SUM、COUNT、AVG 等等。
例如,若想看到订单表中具有特定 ID 号的客户订货的金额总值,只需将具有相同 Customer ID 号的订货记录合成为一个记录,同时寻找订货总量即可。
首先在“字段”选项卡中,把表达式 SUM(Orders.order_net) 添加到查询输出中,然后利用“分组依据”选项卡,根据 Customer ID 号分组,输出结果显示了每个客户的净订货总量:
设置“分组依据”选项
若要设置分组选项
– 或者 –
选择弹出“表达式生成器”的对话按钮,在“表达式”框中键入表达式。
也可以在已分组的结果上设置选定条件。
若要对已进行过分组或压缩的记录而不是对单个记录设置筛选,可在“分组依据”选项卡中选定“满足条件”按钮。您可使用字段名,字段名中的合计函数,或者“字段名”框中其余的表达式。
基于上述示例,您可以使用按客户号码显示总销售额的查询,进一步利用“满足条件”按钮,限制查询的结果为那些净订货量超过 50000 美元的顾客:
为一个组设置条件
为一个组设置条件
在完成了查询设计并指定了输出目的地后,可以用“运行”按钮启动该查询。Visual FoxPro 执行用“查询设计器”产生的 SQL Select 语句,并把输出结果送到指定的目的地。若尚未选定输出目的地,结果将显示在“浏览”窗口中。
若要运行查询
如果想使结果输出到不同的目的文件,可将结果定向输出到表单、表、报表或其他目的文件。如果想了解 SQL 语句,可查看生成的 SQL 语句。
有关详细内容,请参阅 SELECT - SQL Command。
可以把查询结果输出到不同的目的地。如果没有选定输出目的地,查询结果将显示在“浏览”窗口中。
从“查询”菜单中选择“查询去向”,或在“查询设计器”工具栏中选择“查询去向”按钮,此时将显示一个“查询去向”对话框,您可以在其中选择将查询结果送往何处。
若要选择查询结果的去向
选择查询去向
使用下表选择查询输出的去向。
若要 | 选择的输出选项 |
在“浏览”窗口中显示查询结果 | 浏览 |
将查询结果存贮在一个命名的临时只读表中 | 临时表 |
使查询结果保存为一个命名的表 | 表 |
使查询结果可用于 Microsoft Graph(Graph 是包含在 Visual FoxPro 中的一个独立的应用程序) | 图形 |
在 Visual FoxPro 主窗口或当前活动输出窗口中显示查询结果 | 屏幕 |
将输出送到一个报表文件(.frx) | 报表 |
将输出送到一个标签文件(.lbx) | 标签 |
许多选项都有一些可以影响输出结果的附加选择。例如,“报表”选项可以打开报表文件,并在打印之前定制报表,您也可以选用“报表向导”帮助自己创建报表。有关详细内容,请参阅第七章“设计报表和标签”。
如果您要确认查询的定义是否正确,可查看使用“查询设计器”生成的 SQL 语句。也可添加注释来说明查询的目的。添加的注释出现在 SQL 窗口里。
在建立查询时,从“查询”菜单中选择“查看 SQL”,或从工具栏上选择“显示 SQL 窗口”按钮,可以查看查询生成的 SQL 语句。
SQL 语句显示在一个只读窗口中,您可以复制此窗口中的文本,并将其粘贴到“命令”窗口或加入到程序中。
若要查看查询的 SQL 语句
查询的 SQL 语句
如果想以某种方式标识查询,或对它作一些注释说明,可以在查询中添加备注,这对以后确认查询及其目的很有帮助。
若要给查询添加注释
在查询中添加注释
键入的注释将出现在 SQL 窗口的顶部,并且前面有一个 * 号表明其为注释。
利用“查询设计器”中其他可用的选项,很容易进一步定制查询。可使用过滤器扩充或缩小搜索。也可以添加表达式计算字段中的数据。
您可能需要对查询所返回的结果做更多的控制,例如,查找满足多个条件的记录,象来自某个指定州而且未付款额超过 1000 美元的顾客,或者搜索满足两个条件之一的记录,如来自华盛顿或俄勒冈的顾客。在这些情况下,您都需要在“筛选”选项卡中加进更多的语句。
在 Visual FoxPro 中,如果在“筛选”选项卡中连续输入选择条件表达式,那么这些表达式自动以逻辑“与”(.AND.)的方式组合起来,如果您想使待查找的记录满足二个以上条件中的任意一个时,您可以使用“添加‘或’”按钮在这些表达式中间插入逻辑“或”(.OR.)操作符。
如果想使查询检索同时满足一个以上条件的记录,只需在“筛选”选项卡中的不同行上列出这些条件,这一系列条件自动以“与”(AND)的方式组合起来,因此只有满足所有这些条件的记录才会检索到。
例如,假设您正在搜索一个雇员表,想查看所有在英国的销售代理,则可以在不同的行上输入两个搜索条件:
组合两个过滤器
若要设置“与”(AND)条件
若要使查询检索到的记录满足一系列选定条件中的任意一个时,可以在这些选择条件中间插入“或”(OR)操作符将这些条件组合起来。
例如,若想搜索那些住在华盛顿或加利福尼亚的顾客:
在两个过滤器之间添加一个“或”(OR)操作符
若要设置“或”(OR)条件
您可以把“与”(AND)和“或”(OR)条件组合起来以选择特定的记录集。
例如,若想检索来自华盛顿或加利福尼亚,同时最大订货量超过 5000 美元的顾客:
组合不同的过滤器
重复记录是指其中所有字段值均相同的记录。如果想把查询结果中的重复记录去掉,只需选中“杂项”选项卡中的“无重复记录”复选框。否则,应确认“无重复记录”框已被清除。
注释 如果选中了“无重复记录”复选框,在 SELECT 命令的 SELECT 部分,字段前会加上 DISTINCT。
您可使查询返回包含指定数目或指定百分比的特定字段的记录。例如,查询可显示含 10 个指定字段最大值或最小值的记录,或者显示含有 10% 的指定字段最大值或最小值的记录。
利用“杂项”选项卡的顶端设置,可设置一定数目或一定百分比的记录。若要设置是否选取最大值或最小值,可设置查询的排序顺序。降序可查看最大值记录,升序可查看最小值记录。
若要检索一个数目或一定百分比的极值记录
使用“字段”选项卡底部的方框,可以在查询输出中加入函数和表达式。
可以显示列表来查看可用的函数,或者直接向框中键入表达式。如果希望字段名中包含表达式,可以添加别名。
例如,若要使查询结果包括别名为 Total
的 order 量值的总和,请键入:
SUM(orders.order_amt) AS Total
创建包括在查询结果中的表达式
可直接在对话框中键入一个表达式或使用“字段”选项卡中的“表达式生成器”。
若要在查询输出中添加表达式
– 或者 –
选择对话按钮使用“表达式生成器”,再在“表达式”框中键入一个表达式。
注释 计算中将忽略 null 值,有关表达式中 null 值的详细内容,请搜索“Null 值”。
不同于简单搜索与一个或多个字段相匹配的记录,使用一个表达式可以组合两个字段,或基于一个字段执行某计算并且搜索匹配该组合或计算字段的记录。
可直接在示例框中键入表达式。如需帮助,可使用“表达式生成器”,“表达式生成器”可从字段选项卡的“函数和表达式”框旁边的对话按钮中得到。
例如,使用 Orders 表时,需要检查某客户的总折扣,如下所示在表达式中组合订单的数量和订单的折扣:
Orders.order_amt * Orders.order_dsc
在“表达式生成器”中创建一个表达式