SQL查询在Visual FoxPro数据库中的应用

时间:2022-04-19 04:36:57

【前言】SQL查询在Visual FoxPro数据库中的应用由文秘帮小编整理而成,但愿对你的学习工作带来帮助。(Kunming University of Science and Technology, Kunming 650093, China) Abstract: Query processing is the indispensable element of database management system. This paper introduce how the SQL SELECT statements be used in Visual FoxPro as well as the ...

SQL查询在Visual FoxPro数据库中的应用

摘要:数据查询是数据库管理系统中不可缺少的部分。该文主要介绍了sql SELECT查询语句在visual foxpro中的应用以及在不同版本存在的问题和解决方法。

关键词:SQL;Visual FoxPro;查询;分组

中图分类号: TP311.13文献标识码:A文章编号:1009-3044(2011)17-4009-02

Application of SQL Queries in Visual FoxPro Database

ZHAO Xiao-xia, LEI Jin-hui, TIAN Chun-jin

(Kunming University of Science and Technology, Kunming 650093, China)

Abstract: Query processing is the indispensable element of database management system. This paper introduce how the SQL SELECT statements be used in Visual FoxPro as well as the problems and solutions along with this application.

Key words: SQL; VFP; Query; Group

SQL(Structured Query Language结构化查询语言)是标准的数据库通用语言,它既能用于大型关系型数据库系统,也能用于微机数据库系统。目前,绝大多数流行的关系数据管理系统如Oracle,Sybase,SQL Server,Visual FoxPro等都采用了SQL语言。

1 SQL的工作原理

SQL语言分为三部分:数据定义语言,用于完成数据库对象的建立、删除和修改;数据操纵语言,是完成对数据操作的命令;数据控制语言,是控制用户对数据库的访问权限。Visual FoxPro中没有权限管理,因此没有数据控制语言命令[1]。

数据查询是数据库的核心操作,其功能是根据用户的需要以一种可读的方式从数据库中提取所需数据。数据库管理系统是一个存放信息的数据库及管理、控制数据库的软件系统,当用户需要检索数据库中的数据时,可以通过 SQL语言发出请求,数据库管理系统对请求进行处理,按要求将检索到的数据返给用户。图1为SQL的工作原理。

2 Visual FoxPro中查询的实现

在Visual FoxPro中实现查询有两种途径:一是用相关命令或查询工具,二是用SQL标准查询语言。

2.1 用Visual FoxPro中的相关命令或查询工具

在Visual FoxPro中,可以使用LIST/DISPLAY、FIND、SEEK、LOCATE、FILTER等命令查询数据。但这些命令受到一定操作的限制,如必须打开相关的数据表、对表建立索引、速度慢等。

自从Visual FoxPro中引入SQL语言后,用SQL数据操纵语言中的SELECT命令进行查询,不仅方便编程,还能提高数据处理速度。

SELECT命令可以在命令窗口直接输入,也可以编写在程序中。但是,使用者一般不可能对每个表的字段信息及相互关系非常清楚,要翻阅相应资料才能写出相应的SELECT语句,另外,较长的SELECT语句不容易编写。为此,Visual FoxPro提供了可视化设计SELECT命令的查询工具,即查询设计器。查询设计器实际上是SELECT命令的交互式设计操作,它以页面形式提供了完整的SELECT命令格式,使用者不必关心字段信息,只要通过选择所需的内容就可以轻松完成查询。

2.2 SQL标准查询语言

SELECT命令格式:

SELECT [ALL|DISTINCT] 选项 [AS 显示列名] FROM 表名或视图名;

[WHERE 条件表达式];

[GROUP BY 分组选项 [HAVING筛选条件表达式]];

[ORDER BY 排序选项] [ ASC|DESCI ] [2]

该语句中,SELECT指定查询中显示的字段、常量和表达式,FROM指定查询所用表或视图的名称,WHERE指定查询条件,GROUP BY根据某一列和某几列的值将查询结果中的各行进行分组,HAVING指定包含在查询结果中的组必须满足的条件,ORDER BY根据某一列和某几列的数据查询结果进行排序。

3 SELECT在Visual FoxPro中存在的问题及解决方法

在Visual FoxPro中,使用SELECT语句可以对数据进行分组查询并计算,简单分组得到的查询结果不能令人满意,要想得到精确的查询结果需要设计复杂的分组。下面举例介绍分组查询在Visual FoxPro中的问题及解决方法。

3.1 同一SELECT语句在不同Visual FoxPro版本中的查询执行

有如图2所示的xsda数据表。

分别求各专业男、女生的score总和,SELECT语句如下:

SELECT speciality,sex,sum(score) from xsda GROUP BY speciality

该语句在Visual FoxPro6及Visual FoxPro7中执行结果如图3所示。

在Visual FoxPro6及Visual FoxPro7中能执行该查询语句并得到正确的统计结果,而在Visual FoxPro8中执行此查询命令会出现“SQL:GROUP BY clause is missing or invalid”的提示,这是因为Visual FoxPro8中的SELECT语句采用SQL语言标准,即GROUP BY后的分组字段必须与SELECT后的输出字段一致或多于其后的字段,如果SELECT后需要出现其它字段,必须使用聚合函数。而Visual FoxPro6将此做了隐藏处理,即查询输出不受分组字段限制。

为了让Visual FoxPro8及其以上版本与老版本兼容,在执行SQL SELECT查询命令前,可以用函数SYS(3099,70)或者SET ENGINEBEHAVIOR 70命令将Visual FoxPro8转换为Visual FoxPro7,否则就要注意SELECT命令必须符合Visual FoxPro8的语句规则。

3.2 非分组字段与字段函数同时作为选项列表出现的错误及解决方法

SUM ()、AVG ()、COUNT()、MAX()和MIN()等聚合函数使SQL统计功能更加强大,同时也增加了编写SELECT语句的难度,尤其对初学者更难掌握。

有如图4所示的elective表。

如果要查找每个同学最近一次选修课程的情况,一般会写出如下的SQL语句:

SELECT code,coursecode,coursename,max(date) from elective GROUP BY code

该SELECT查询结果如图5所示。

由查询结果看出,查询所得的code并不一定是对应具有最近选课日期的那一条记录,如学号为2000130101的学生应该在2007年选修1号课程“computer”,而查询的结果是选修了2号课程“datastructur”。要想得到正确的结果,应用SELECT嵌套实现。命令如下:

SELECT code,coursecode,coursename,date from elective where code+DTOC(date) in;(SELECT code+DTOC(MAX(date)) FROM elective GROUP BY code)

SELECT查询结果如图6所示。

4 结束语

SQL强大的功能,极大地丰富了Visual FoxPro的数据处理能力,特别是SELECT语句在其中的应用为Visual FoxPro增色不少。由于SELECT语句灵活多变,要想得到精确的查询结果,必须设计正确的SQL SELECT查询,否则会出现不符合实际数据的信息。

参考文献:

[1] 翁正科.Visual FoxPro8数据库开发教程[M].北京:清华大学出版社,2004:171-172.

[2] 李红,张雪凤,尹征杰.数据库原理及应用[M].北京:高等教育出版社,2003:100.

[3] 赵晓侠,郑发鸿,田春瑾,等.Visual FoxPro8.0数据库程序设计[M].2版.北京:铁道出版社,2009:110.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:基于教材文本的本体学习方法研究 下一篇:容侵PKI在云数据库中的应用