时间:2022-09-27 02:25:27
摘要:基于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的处理能力,已经成为编程中不可缺少的部分。