在VFP中利用SQL快速实现信息处理

时间:2022-09-27 02:25:27

在VFP中利用SQL快速实现信息处理

摘要:基于Visual FoxPro(vfp)和Structured Query Language(SQL)编程的应用实践,文章阐述了SQL的工作原理,并从数据查询、数据表联接、数据更新、数据统计等方面介绍了SQL语言在VFP中的应用,给出了具体应用实例,以便于VFP使用者利用sql实现数据库内的复杂信息的快速存储、自然联接和统计。以及信息的便捷查询。

关键词:Structured Query Language语言;Visual FoxPro;数据库;信息处理

0 引言

结构化查询语言SQL是英文Structured Query Language的缩写。按照美国国家标准协会(ANSI)的规定,SQL被作为关系型数据库管理系统的标准语言,SQL语句可以用来执行各种操作。目前,绝大多数流行的关系数据管理系统(DBMS),例如Oracle,Sybase,SQL Server,Visual FoxPro等都采用了SQL标准语言。

如图1所示,数据库管理系统是一个存放信息的数据库及管理、控制数据库的软件系统,当用户需要检索数据库中的数据时,可以通过SQL语言发出请求,数据库管理系统对SQL请求进行处理,将按要求所检索到的数据返给用户。

尽管查询数据是SQL的最重要的功能之一,但它绝不仅仅是一个查询工具,它还为用户提供了用于控制数据库管理系统的所有功能,包括数据定义、数据操纵、数据控制等功能。笔者在多年的教学中深深体会到,在VFP中使用SQL语句来处理数据,不仅方便了编程,而且还可以大大提高数据处理的速度。

以下从打开数据表、表间的联接、数据查询等几方面叙述SQL在VFP中实现快速信息处理的具体应用。

1 数据查询内容丰富、使用简单

SQL的核心是查询,其基本语句形式是:

SELECT * ROM…WHERE…

SQL数据查询有:“简单查询”、“多表联接查询”、“嵌套查询”、“特殊运算符查询”“通配符查询”、“排序查询”等多种形式,程序语句简单,使用起来方便快捷。

例如:在“成绩DBF”表中求出选修111101号课程学生中成绩比选修141203号课程的任何学生的成绩都要高的学生的学号和成绩。

语句形式为:

SELECT学号.成绩FROM成绩WHERE课程号=“111101”

and成绩>all;

(SELECT成绩FROM成绩WHERE课程号=“141203”)

2 数据表的联接

在进行数据库结构设计时,为了消除冗余数据,会将数据分配在不同的表中存储,这样我们就不可避免地需要同时从不同的表中检索数据。要想使用一个查询从多个表中返回数据,就需要清楚这些表中的数据之间的关系,进而建立联接,只有这样才能保证从来源于多表的检索结果是正确的。

在Visual FoxPro中,数据表的联接是一种等值联接,即只有满足联接条件,相应的结果才会出现在结果表中,并且是采用了“视图”和“查询”的方法来解决,这两种方法也是只有视窗形式,而没有语句,更不能进行复杂联接。而SQL语句采用的是自然联接,大大提升了联接的功能。其联接的运算方法是:首先保证一个表中满足条件的记录都在结果中,然后将满足联接条件的记录与另一个表的记录进行联接,不满足联接条件的则应将来自另一个表的属性值置为空值。SQL语句有四种联接方式:内部联接(Inner Join)、左联接(Left join)、右联接(RightJoin)、完全联接(Full Join)。

例如:现有数据表A和数据表B,两表的结构和记录已知。请用SQL语句对它们进行四种联接。

内部联接(Inner Join):

Select A.Key,B.K from A Inner Join B On A.Key=B.key

左联接(Left Join):

Select A.Key,B.K from A Left Join B On A.Key=B.key

右联接(Right Join):

Select A.Key,B.K from A Ringht Join B On A.Key=B.key

完全联接(Full Join):

Select A.Key,B.K from A Full Join B On A.Key=B.key

3 数据存储规范及数据更新方便简捷

在数据库编程中,常常需要将大量的数据存储。SQL语句有下列五种形式的数据存储语句:

INTO ARRAY;INTO CURSOR;INTO TABLEIDBF;TO FILE;

TO PRINTER

INTO ARRAY语句可以将一个查询结果存放到一个二维数组中;INTO CURSOR语句可以将一个查询结果存放到临时数据表文件中,可以像数据表一样浏览其中的记录。当关闭表时将自动删除;INTO TABLEIDBF将查询结果存放到永久表中;TO FILE将查询结果存放到文本文件中;TO PRINTER将查询结果直接输出到打印机。

在数据库操作中,数据记录的更新是常有的事。在VisualFoxPro中数据记录更新是通过自动替换(REPLACE)语句和表间记录更新(UPDATE)语句实现的。自动替换主要用于单表。其中表间记录更新的使用形式非常复杂,牵扯到多语句的相互制约,操作中思路很难理顿,必须要考虑到每个表的指针移动情况。SQL语句就省事多了,单表和多表可以一起考虑,其操作非常简捷。

例如:将“英语DBF”表中的“考分”字段的记录值加到“成绩.DBF”表中的“总分”字段记录中,同时将这两个表中涉及到的记录做标记,用于意外情况的处理(判断这两个表在操作中有可能被漏掉的记录)。SQL语句为:

UPDATE(SELECT成绩.学号,成绩.总分,英语.姓名,英语.考分,英语.标记From成绩Inner Join英语On成绩.学号=英语.学号)SET成绩.总分=成绩.总分+英语.考分,成绩。标记=1,英语.标记=1

4 数据统计多功能融为一体

统计同样是数据库编程中常用的功能之一。在VisualFoxPro中对数据表的统计工作用到了三条语句(COUNT、SUM、AVERAGE)和两个函数MAX( )、MIN( ),功能分散。在SQL语句中不再将它们作为语句和函数分开,而是作为参数使用。这样一来就可以把数据统计放在一条语句中来完成,使数据统计工作实现了融合。

例如:求“英语DBF”表中全班人数、“考分”字段的总分、平均分、最高分、最低分。

SELECT COUNT(*),SUM(考分),AVG(考分),MAX(考分),MIN(考分)

FROM英语

如果要把求得的分值分别保存到变量A、B、C、D、E中的话,可以将上面的语句改写成:

SELECT COUNT(*)AS A,SUM(考分)AS B,AVG(考分)AS C,

MAX(考分)AS D,MIN(考分)AS E FROM英语5结束语

SQL语言可以直接在Visual FoxPro的命令窗口以人机交互的方式使用,也可以嵌入到程序中。Visual FoxPro应用开发工具已将SQL语言直接嵌入到自身的语言之中,使用起来更加方便。由于SQL中的强大处理功能,极大地丰富了Visual FoxPro的处理能力,已经成为编程中不可缺少的部分。

上一篇:基于混合密码体制的Web用户验证安全策略 下一篇:“任务驱动式”的《C语言程序设计》教学