预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共23页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章查询与视图在软件开发中经常用到数据的查询,如学生成绩管理,人事档案,图书检索等软件,查询的准确、速度直接影响软件的质量、效率、应用及维护,VFP开发工具用三个途径解决查询问题。第一个途径就是运用SQL语句查询,第二个途径就是用查询设计器建立快速查询,第三个途径是用视图设计器建立视图,实现快速查询。4.1查询的一般概念4.1.1查询VFP中的查询使用查询设计器,从数据库表或自由表中获取有用数据,经过对查询条件、查询要求的设置,形成一个*.QPR文件,通过DO命令来执行。4.1.2视图VFP中的视图是用视图设计器从数据库表中获取有用数据,与查询一样经过查询条件、查询要求的设置形成视图。视图是以视图名的形式存在数据库中。视图中数据的更新可以使源表相应数据更新。视图的执行要在数据库中执行。4.1.3SQL查询SQL是关系数据库的国际标准语言。为此,世界上许多语言开发商都将SQL语言作为数据库对数据存取的共同标准接口。有的已将SQL语言嵌入到语言开发工具中,使得人们在软件开发时运用数据库是极为方便。之所以SQL能成为国际标准语言,主要原因它是结构化的查询语言。它的综合统一体现在它集数据定义语言、数据操纵语言、数据控制语言的功能为一体。再就是它高度的非过程化,无需一步步地告诉计算机如何做,只要指名怎么做系统就可以自动完成。SQL语言简单便于掌握,特别是在查询复杂可视化工具无法解决时,SQL可以解决。4.2SQL语句4.2.1SELECT查询语句1.基本语句格式:SELECT<行列限制表达式>[INTODBF|TABLE<新表名>]FROM<表名列表>[WHERE<条件>]功能:从表名列表的表中查找符合条件的,按<行列限制表达式>的形式显示。若选[INTODBF|TABLE<新表名>]子句,查询结果存入新表。说明:<行列限制表达式>格式:[ALL|DISTINCT][TOP<数值表达式>[PERCENT]][别名.][列名[AS栏目名]][,[别名.][列名AS[栏目名]…](1)[ALL|DISTINCT]子句:ALL输出结果有重复记录,是子句默认值。DISTINCT输出结果无重复记录。(2)[TOP<数值表达式>[PERCENT]]子句:此子句TOP<数值表达式>是符合条件的内容中取前<数值表达式>个记录。PERCENT是取前面分之<数值表达式>个记录。(3)[别名.][列名[AS栏目名]][,[别名.][列名AS[栏目名]…]子句:列名可以是字段、含字段的表达式或表达式。指定输出结果中的字段,此子句也可用*代替此时显示表中所有字段。例4.1SELECT基本语句应用USE学生1SELECT*FROM学生1OPENDATABASE学生&&打开学生数据库SELECT*FROM学生INTOTABLE学生y&&显示学生表中所有内容SELECT姓名,入学成绩FROM学生WHERE入学成绩>=500SELECTDISTINCT姓名,入学成绩FROM学生WHERE入学成绩>=500SELECT学生.学号,学生.姓名,学生成绩.数学FROM学生,学生成绩WHERE学生.性别=’女'AND学生成绩.数学>=60AND学生.学号=学生成绩.学号SELECTTOP2*FROM学生ORDERBY学号CLOSEDATABASEALL2.SELECT中常用的系统函数在实际应用中经常在查询结果进行统计、求平均值、汇总等基本要求。SQL提供了一些常用的系统函数。如表4.1所示。表4.1常用系统函数函数说明AVG(<SELECT表达式>)求<SELECT表达式>的平均值COUNT(<SELECT表达式>)统计记录个数MIN(<SELECT表达式>)求<SELECT表达式>的最小值MAX(<SELECT表达式>)求<SELECT表达式>的最大值SUM(<SELECT表达式>)求<SELECT表达式>的和<SELECT表达式>:为[DISTINCT|ALL]表达式。说明:DISTINCT在计算时去掉重复值,ALL在计算所有值是默认值,表达式可为*、字段名、数学函数、常量、函数或表达式。3.SELECT分组子句格式:[GROUPBY<表达式1>[,<表达式2>[,…][HAVING<筛选条件>]功能:对查询结果进行分组。[HAVING<筛选条件>]为指定分组必须满足的条件。例4.2分组查询应用。OPENDATABASE学生SELECTAVG(入学成绩)FROM学生SELECTCOUNT(*)FROM学生SELECTSUM(入学成绩)FROM学生GROUPBY性别SELECTCOUNT(*)AS'学生人数'FROM学生GROUPBY性别HAVING(入学成绩)>460SELECT学生.学号,AVG(学生.入学成绩),学生成绩.VFPFROM学生,学生成绩GROUPBY性别