文档详情

第4章查询和视图

大米
实名认证
店铺
PPT
3.78MB
约34页
文档ID:588476528
第4章查询和视图_第1页
1/34

查询和视图查询和视图第4章2024/9/81 4.1 概述概述n查询:向一个数据源发出检索信息的请求,它使用一些条件查询:向一个数据源发出检索信息的请求,它使用一些条件提取特定的记录提取特定的记录n查询的本质查询的本质u创建查询基于特定的数据源u查询的运行结果是一个基于表和视图的动态的、只读的数据集合u一个查询可以用一条SELECT-SQL语句来完成u查询保存为一个扩展名为.QPR的文件文件中保存的是实现查询的SELECT-SQL命令,而非查询的结果n查询的建立方法查询的建立方法u查询设计器:项目管理器uSELCET-SQL命令命令类型上:可以是自由表、数据库表或视图类型上:可以是自由表、数据库表或视图数量上:可以上单张表或多张表数量上:可以上单张表或多张表2024/9/82 通过以下几个步骤建立查询:通过以下几个步骤建立查询:打开打开“查询设计器查询设计器”开始建立查询开始建立查询选择想从中获取信息的表或视图,并建立好它们之间选择想从中获取信息的表或视图,并建立好它们之间的关系的关系选择出现在查询结果中的字段选择出现在查询结果中的字段设置筛选条件来查找所需的记录设置筛选条件来查找所需的记录设置排序或分组选项来组织查询工作设置排序或分组选项来组织查询工作选择查询结果的输出类型选择查询结果的输出类型保存创建的查询,将查询文件保存为带保存创建的查询,将查询文件保存为带.QPR扩展名的扩展名的文件。

文件运行查询运行查询2024/9/83 4.2 用查询设计器建立查询用查询设计器建立查询建立基于单张表的查询例:查询教师表中所有女教师的姓名,性别,出生日期和工作日期,并工作日期升序排序1.打开查询设计器2. “字段”:确定查询要输出的字段或表达式 保存:.QPR;运行 DO 文件名.QPR;查看SQL语句3. “筛选”:确定查询条件,定义记录子集;4.“排序”:指定查询结果的记录顺序2024/9/84 建立基于多表的查询建立基于多表的查询P117n当需要获取存储在两个或更多表或视图中的信息时,只要把所有有关的表添加到查询中,并设置它们之间的联接关系1. 联接和联接条件联接(Join),是指查询或视图的一个数据库操作通过比较指定字段中的值联接两个或多个表或视图中的记录2. 联接的类型 P117 表4-22024/9/85 建立基于多表的查询建立基于多表的查询二.建立多表查询例1. P1112024/9/86 5.“分组”:用于生成分组查询,把具有相同字段值的记录分为一组,合并为查询结果中的一条记录以完成基于一组记录的计算或统计;如何判别一个查询是否需要进行分组?如何判别一个查询是否需要进行分组? 一般地说,如果题意中有统计的要求,都要进行分组。

一般地说,如果题意中有统计的要求,都要进行分组而且这样的查询,题意中大多有而且这样的查询,题意中大多有各各、、每每等字样例:计算例:计算 js表中表中各各个系的人数个系的人数例:统计例:统计每每门课程的选课人数门课程的选课人数 2024/9/87 如何确定分组如何确定分组一般地说,在一般地说,在各各、、每每等字样后紧跟的词,就是分组的依据等字样后紧跟的词,就是分组的依据例:计算例:计算 js表中各个系的人数表中各个系的人数 按按js 表的系代号表的系代号xdh字段分组字段分组 例:统计每门课程的选课人数例:统计每门课程的选课人数 按按cj表的课程代号表的课程代号kcdh字段分组字段分组但也有一些分组查询中不出现各或每字样,这些查询需要但也有一些分组查询中不出现各或每字样,这些查询需要从题意中分析出从题意中分析出例:求例:求 js表中男女教师的人数表中男女教师的人数 按按js表的性别表的性别xb字段分组字段分组2024/9/88 P114例2合计函数:COUNT(),SUM();AVG();MAX();MIN()在分组基础上,对查询结果筛选:如平均成绩在80分以上6.“杂项”7.查询结果的输出类型查询结果的输出类型: :查询查询------查询去向查询去向2024/9/89 4.3 SELCET-SQL2024/9/810 4.3.1 SQL概述nSQL(Structured Query Language,结构化查询语言)是美国国家标准局ANSI确认的关系数据库语言的标准。

VFP支持SQL一个SQL命令可以代替多个VFP命令2024/9/811 VFP支持如下SQL命令:ŸSELECT - SQLSELECT - SQLŸALTER TABLE - SQLALTER TABLE - SQLŸCREATE CURSOR - SQLCREATE CURSOR - SQLŸCREATE TABLE -SQLCREATE TABLE -SQLŸDELETE - SQLDELETE - SQLŸINSERT - SQLINSERT - SQLŸUPDATE - SQLUPDATE - SQL2024/9/812 SELECT-SQL命令的语法:命令的语法:SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]][Alias.] Select_Item [AS Column_Name][, [Alias.] Select_Item [AS Column_Name] ...]FROM [FORCE][DatabaseName!]Table [[AS] Local_Alias][[INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOINDatabaseName!]Table [[AS] Local_Alias][ON JoinCondition …][[INTO Destination]| [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]][WHERE JoinCondition [AND JoinCondition ...][AND | OR FilterCondition [AND | OR FilterCondition ...]]][GROUP BY GroupColumn [, GroupColumn ...]][HAVING FilterCondition][UNION [ALL] SELECTCommand][ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]杂项选项卡杂项选项卡字段选项卡字段选项卡联接选项卡联接选项卡筛选选项卡筛选选项卡分组选项卡分组选项卡排序选项卡排序选项卡分组选项卡中的满足条件分组选项卡中的满足条件查询去向查询去向2024/9/813 2、查询内容:、查询内容:[Alias.] Select _Item [AS Column_Name]子句子句 (1) Alias.限定匹配项的名称。

如果多个项具有相同的名称限定匹配项的名称如果多个项具有相同的名称,则应则应在这些项名前加上表的别名和一个句点在这些项名前加上表的别名和一个句点,以防止出现重复的列以防止出现重复的列((2)) Select _Item 指定包含在查询结果中的项,可以是字段、指定包含在查询结果中的项,可以是字段、常量、表达式和用户自定义的函数常量、表达式和用户自定义的函数 注:当查询需要分组时,常需要用到一些合计函数注:当查询需要分组时,常需要用到一些合计函数AVG()、()、COUNT()、()、SUM()、()、MIN()、()、MAX() 如果查询结果中包含源表中的所有字段,可使用如果查询结果中包含源表中的所有字段,可使用“*”符号3)) AS Column_Name 指定查询结果中的各个项的标题指定查询结果中的各个项的标题1、杂项、杂项[ALL/DISTINCT]::设置是否允许重复纪录设置是否允许重复纪录[TOP nExpr[PERCENT]]::设置结果的记录范围设置结果的记录范围2024/9/814 3、查询对象、查询对象:FROM子句子句——列出所有从中检索数据的表。

列出所有从中检索数据的表注:(注:(1))Local_Alias 为表指定一个本地别名如果指定了本为表指定一个本地别名如果指定了本地别名,那么在整个语句中都必须用这个别名来代替表名地别名,那么在整个语句中都必须用这个别名来代替表名 ((2)) 如果是多表查询,要确保联接条件的格局应该是如果是多表查询,要确保联接条件的格局应该是“链式链式”的,即第一个联接条件右边的表别名应该是第二个联接的,即第一个联接条件右边的表别名应该是第二个联接条件左边的表别名,以此类推所以一个表别名最多出现两次条件左边的表别名,以此类推所以一个表别名最多出现两次(左一次,右一次)左一次,右一次)4、查询结果去向:、查询结果去向:INTO子句子句——指定在何处保存查询结果指定在何处保存查询结果查询结果去向是可选项,缺省结果是查询浏览窗口查询结果去向是可选项,缺省结果是查询浏览窗口ARRAY 数组名CURSOR临时表名DBF 表名INTOFILE 文本文件名PRINTERSCREENTO2024/9/815 5、条件查询、条件查询:WHERE子句子句—— 指定筛选条件指定筛选条件1)当多表查询时,也可以用)当多表查询时,也可以用WHERE子句实现多表之间的查子句实现多表之间的查询询。

6、分组查询:、分组查询:GROUP BY子句子句—— 按列的值对查询结果进行按列的值对查询结果进行分组1))GROUPCOLUMN可以是字段名或表达式,也可以是该可以是字段名或表达式,也可以是该列在查询结果中的列位置(最左边的列编号为列在查询结果中的列位置(最左边的列编号为1))((2)用于分组的字段不一定是输出项用于分组的字段不一定是输出项3))HAVING子句指定包括在查询结果中的组必须满足的筛选子句指定包括在查询结果中的组必须满足的筛选条件,它应该和条件,它应该和GROUP BY一起使用一起使用2024/9/816 7、查询结果的排序、查询结果的排序:ORDER BY子句子句——根据列的数据对查询结果进行排序根据列的数据对查询结果进行排序1)每个)每个ORDER_ITEM必须对应查询结果中的一列必须对应查询结果中的一列2)) ORDER_ITEM可以是输出列的列名或别名,也可以是查询结果中的列可以是输出列的列名或别名,也可以是查询结果中的列位置位置(最左边的列编号为最左边的列编号为1)) ((3))ASC 指定以升序排列,是指定以升序排列,是ORDER BY的默认选项的默认选项。

DESC指定以降序指定以降序排列8、联合查询、联合查询:UNION子句子句 把一个把一个SELECT-SQL语句的最后查询结果和另一个语句的最后查询结果和另一个SELECT-SQL语句的最后查询结果组合起来语句的最后查询结果组合起来1)默认情况下,)默认情况下, UNION检查组合结果并排除重复的行;如需要重复的行,则加上检查组合结果并排除重复的行;如需要重复的行,则加上[ALL]子句2)要组合多个)要组合多个UNION子句,可以使用括号子句,可以使用括号UNION子句要遵守下列的规则:子句要遵守下列的规则:((1)不能使用)不能使用UNION来组合子查询来组合子查询2)两个)两个SELECT-SQL命令的查询结果中的列数必须相同命令的查询结果中的列数必须相同3)) 两个两个SELECT-SQL查询结果中的对应列必须有相同的数据类型和宽度查询结果中的对应列必须有相同的数据类型和宽度4)只有最后的)只有最后的SELECT-SQL中可以包含中可以包含ORDER BY子句,而且按编号指出所输出的子句,而且按编号指出所输出的列2024/9/817 4.4视图的创建和使用视图的创建和使用2024/9/818 视图与查询的区别n查询得到的是一组只读型的检索结果。

而视图可以从表中提取一组记录,改变这些记录的值,并把更新结果送回到源表中n查询保存为一个可执行的.qpr程序文件,而视图保存在数据库中,是数据库的组成部分,与库表具有类似的性质视图兼有表和查询的特点源数据表称为基表n两类:本地视图,远程视图2024/9/819 00distinct2024/9/820 To printerNot in2024/9/821 1Sum(iif(cj.cj<60, 0, kc.xf))2024/9/822 某考试管理系统中有两个表:考试语种表(某考试管理系统中有两个表:考试语种表(tyz.dbf)和考生报)和考生报名表(名表(bm.dbf)考试语种表含有语种代号()考试语种表含有语种代号(yzdh,c,2)和语种)和语种名称(名称(yzmc,c,15)字段,考生报名表含有准考证号()字段,考生报名表含有准考证号(zkz,c,10))等字段,设准考证等字段,设准考证zkz字段的第字段的第4、、5位字符表示该考生所报的考位字符表示该考生所报的考试语种代号,则下列试语种代号,则下列select-sql命令可用于统计和显示各语种报命令可用于统计和显示各语种报名考试的人数:名考试的人数:2024/9/823 Select tyz.zydh, tyz.yzmc, count(*) as 人数人数;From tyz inner join bm;on tyz.yzdh=考点:考点:substr( )函数使用,函数使用,group by 分组语句的使用分组语句的使用Substr(allt(bm.zkz),4,2)Group by 12024/9/824 设有一学生成绩表(设有一学生成绩表(xscj.dbf)),含有学号(含有学号(xh,C,10)、姓名)、姓名((xm,C,8)和成绩()和成绩(cj,N,3)字段,下列程序段用于统计并显)字段,下列程序段用于统计并显示分数段示分数段60分以下,分以下,90分以上和分以上和60~90分的人数与比例:分的人数与比例:Alter table xscj add columm bz C(8)Update xscj set bz=;; iif(cj<60,’60分以下分以下’,,iif(cj>89,’90分以上分以上’,,’60~89分分’))Select xscjn=RECCOUNT( )Select bz as 分数段分数段,count(*) as 人数人数, *100 as 比例;比例; From xscj; Group by bzAlter table xscj bz //删除备注字段删除备注字段bzCount(*)/n考点:考点:alter table命令使用,命令使用,reccount( )函数,函数,update命令使用命令使用Drop column2024/9/825 数据库数据库SJK的学生表的学生表(xs.dbf)中有学号中有学号(xh,C,8)、姓名、姓名(xm,C,8)等字等字段;成绩表段;成绩表(cj.dbf)中有学号中有学号(xh,C,8)、课程代号、课程代号(kcdh,C,3)和成绩和成绩(cj,N,3)等字段。

以下等字段以下select-sql语句用于查询选修课程门数在语句用于查询选修课程门数在6门以门以上的学生选修课程门数、成绩优秀的课程门数(优秀指成绩大于上的学生选修课程门数、成绩优秀的课程门数(优秀指成绩大于等于等于85)Select xs.xh, xs.xm, count(*) as 选课门数,;选课门数,; as 优秀课程门数;优秀课程门数;From sjk!xs inner join sjk!cj on xs.xh=cj.xh;Group by ; 选课门数选课门数>=6考点:满足条件考点:满足条件having语句的使用;统计函数语句的使用;统计函数sum( )的使用的使用Sum( iif(cj>=85,1,0))xhhaving2024/9/826 Not inlsb2024/9/827 .F. 22024/9/828 HSRQ-(jyrq+60)union2024/9/829 2024/9/830 Sum(单价单价*藏藏书册数书册数)Jy.借书证号借书证号Having 2024/9/831 12002024/9/832 2024/9/833 IIF(cj>59,1,0)通过人数通过人数/3 DESC2024/9/834 。

下载提示
相似文档
正为您匹配相似的精品文档