第五章查询与视图5.1查询与视图的概念•在软件开发中经常用到数据的查询,如学生成绩管理、人事档案、图书检索等软件,查询的准确性、速度直接影响软件的质量、效率、应用及维护。•VFP开发工具用三种途径解决查询问题:用查询设计器建立查询;用视图设计器建立视图;用SQL语句查询。概念查询:使用查询设计器,从数据库表或自由表中获取有用数据,经过对查询条件、查询要求的设置,形成一个后缀为qpr的文件,通过do命令来执行。视图:用视图设计器从数据库表中获取有用数据,与查询一样经过查询条件、查询要求的设置形成视图。视图是以视图名的形式存在数据库中。视图中数据的更新可以使源表相应数据更新。视图的执行要在数据库中执行。SQL语言是关系数据库的标准语言。它是结构化的查询语言。它集数据定义语言、数据操纵语言、数据控制语言的功能为一体。5.2SQL查询1、基本语句格式:SELECT行列限制表达式[INTODBF|TABLE新表名]FROM表名列表[WHERE条件]功能:从表名列表的表中查询符合条件的,按行列限制表达式的形式显示。若选[INTODBF|TABLE新表名]子句,查询结果存入新表。•例1:查询职工档案表的所有信息•例2:查询职工档案表中职工姓名及年龄•例3:查询职工档案表中年龄大于35的职工信息.•例4:查询职工档案表中职称是讲师并且性别是”女”的职工姓名.1Select*from职工档案2Select姓名,年龄from职工档案3Select*from职工档案where年龄354Select姓名from职工档案where职称=“讲师”AND性别=“女”说明:行列限制表达式格式:[ALL|DISTINCT][TOP数值表达式[PERCENT][别名.][列名[AS栏目名]][,[别名.][列名AS[栏目名]……](1)[ALL|DISTINCT]子句:ALL输出结果有重复记录,是子句默认值。DISTINCT输出结果无重复记录。(2)[TOP数值表达式[PERCENT]]子句:TOP数值表达式是符合条件的内容中取前数值表达式个记录。PERCENT是取前面分之数值表达式个记录。(3)[别名.][列名[AS栏目名]][,[别名.][列名AS[栏目名]……]子句:列名可以是字段、含字段的表达式。指定输出结果中的字段,此子句也可用*代替此时显示表中所有字段。比较运算符:=,!=,#==LIKE模式匹配%通配符_表示一个字符BETWEEN…AND…范围逻辑运算符:AND与OR或NOT非•例5:查询职工档案表中性别无重复值.•例6:查询职工档案表中姓氏为刘的职工信息•例7:查询姓名前两个字为王秋的职工情况•例8:查询显示所有职工的姓名、职称和实发金额.•例9:查询职工档案表中年龄在30-40之间的姓名和职称。(b)•5SelectDISTINCT性别from职工档案•6Select*from职工档案where姓名LIKE“刘%”•7Select*from职工档案where姓名LIKE“王秋_”•8Select职工档案.姓名,职工档案.职称,职工工资.实发金额from职工档案,职工工资where职工档案.姓名=职工工资.姓名•9Select姓名,职称from职工档案where年龄between30AND403、SELECT分组子句格式:[GROUPBY表达式1[,表达式2[,……]]][HAVING筛选条件]功能:对查询结果进行分组。[HAVING筛选条件]为指定分组必须满足的条件格式:[ORDERBY关键字表达式[ASC|DESC][,关键字表达式[ASC|DESC]……]]功能:查询结果按关键字排序,ASC升序为默认值,DESC为降序4、排序子句•例10:查询职工档案表的所有信息并按职称排列。•例11:查询职工档案表中按编号顺序前2个的信息.•例12:查询显示所有职工的姓名、职称、岗位津贴、实发金额并按实发金额降序排列.•10Select*from职工档案orderby职称•11Selecttop2*from职工档案orderby编号•12Select职工档案.姓名,职工档案.职称,职工工资.岗位津贴,职工工资.实发金额from职工档案,职工工资where职工档案.姓名=职工工资.姓名orderby实发金额desc2、SELECT中常用的系统函数在实际应用中经常有统计、求平均值、汇总等操作。SQL提供一些常用的系统函数。函数说明AVG(表达式)求表达式的平均值COUNT(*)统计记录个数MIN(表达式)求表达式的最小值MAX(表达式)求表达式的最大值SUM(表达式)求表达式的和•例13在职工工资表中统计工资的平均值。•例14在职工工资表中统计总人数。•例15在职工档案表中统计男职工的年龄之和.•例16统计女职工的工资总和。•例17查询所有职工的姓名及出生年份。•13Selectavg(实发金额)from职工工资•14Selectcount(*)from职工工资•15selectsum(年龄)from职工档案where性别=“男”•16selectsum(实发金额)from职工工资,职工档案where职工档案.姓名=职工工资.姓名groupby职工档案.性别having性别=“女”•17select姓名,2010-年龄from职工档案