《数据库程序设计》第七章.ppt
1,第七章 视图和查询,教学内容:简单的顺序查询与索引查询方法;利用查询设计器和SQL语句构造SQL查询;视图的含义与两类视图的创建与使用方法。重 点:创建视图、利用视图更新数据、创建查询、使用查询。难 点:利用视图设计器和SQL语句创建可更新的视图。,2,第七章 视图和查询,7.1 视图7.2 查询7.3 结构化查询语言SQL,3,7.1 视图,视图不能单独存在,它依赖于某一数据库。只有打开与视图相关的数据库才能创建和使用视图。7.1.1 利用视图设计器创建视图(单表视图)打开数据库,进入“数据库设计器”窗口“文件”“新建”选择文件类型为“视图”“新建文件”,弹出“添加表或视图”窗口把建立视图所依据的表添加到视图设计器中添加可用的字段到“选定字段”的列表框中“退出”,进入保存提示窗口输入视图名保存。浏览视图 选定要浏览的视图“数据库”菜单中选择“浏览”。,4,7.1 视图,7.1.3 创建多表视图在添加表时要添加多个表进入“连接条件”窗口选定连接条件,其余操作同7.1.4 利用向导创建视图7.1.5 利用视图更新数据为保证在视图中更新的数据能够有效送到原表中,需要进行如下设置:数据库中选定视图文件“数据库”菜单中的“修改”“视图设计器”窗口中选择“更新条件”标签选择要更新的字段名选择“发送SQL”,5,7.2 查询,视图与查询视图要在数据库;查询不一定在数据库。视图有更新功能;查询没有。查询有多种输出格式;视图较少。7.2.1 创建查询(单表查询)“文件”“新建”选择“查询”“新建文件”选择要使用的表在“查询设计器”窗口的“可用字段”列表框中,选择需要的字段“退出”输入查询文件名保存7.2.2 创建查询(多表查询)在“选择要使用的表”时选择多张表,并建立连接,其余同7.2.3 运行查询菜单方式:打开查询“查询”菜单运行查询命令方式:DO.qpr,6,7,7.3 SELECT-SQL查询,仓库,职工,供应商,8,订购单,注:NULL是空值,表示供应商未确定,9,一、SELECT-SQL查询命令1、简单查询格式:SELECT ALL|DISTINCT FROM WHERE 说明:ALL表示选出的记录中包括重复值DISTINCT表示选出的记录中不包括重复值缺省为ALL,例1:从职工表中检索出所有工资值 SELECT 工资 FROM 职工或 SELECT DISTINCT 工资 FROM 职工,10,例2:检索仓库表中的所有内容 SELECT*FROM 仓库注:*是通配符,表示所有字段,例3:检索工资多于1230元的职工号SELECT 职工号 FROM 职工 WHERE 工资1230注:WHETE用于指定查询条件,条件须是逻辑表达式,11,例4:检索哪些仓库有工资多于1210元的职工SELECT DISTINCT 仓库号 FROM 职工 WHERE 工资1210注:本处需使用DISTINCT,例5:给出在仓库WH1或WH2工作,并且工资少于1250元的职工号SELECT 职工号 FROM 职工 WHERE 工资1250 AND(仓库号=“WH1”OR 仓库号=“WH2”),12,2、简单的关联查询格式:SELECT ALL|DISTINCT.,.FROM,WHERE 说明:别名为表的别名,例6:找出工资多于1230元的职工号和他们所在城市SELECT 职工号,城市 FROM 职工,仓库 WHERE 工资1230 AND(职工.仓库号=仓库.仓库号),例7:找出工作在面积大于400的仓库的职工号,以及这些职工工作所在城市SELECT 职工号,城市 FROM 职工,仓库 WHERE(面积400)AND(职工.仓库号=仓库.仓库号),13,3、嵌套查询格式:SELECT FROM WHERE IN(SELECT FROM WHERE),例8:哪些城市至少有一个仓库的职工工资为1250元?SELECT 城市 FROM 仓库 WHERE 仓库号 IN(SELECT DISTINCT 仓库号 FROM 职工 WHERE 工资=1250),例9:找出和职工E4挣同样工资的所有职工SELECT 职工号 FROM 职工 WHERE 工资=(SELECT 工资 FROM 职工 WHERE 职工号=“E4”)注:E4为字符型数据,需用引号定界,14,4、排序格式:SELECT FROM WHERE ORDER BY ASC|DESC,ASC|DESC说明:查询结果按的值进行排序默认为ASC升序,例13:按职工的工资值升序检索出全部职工信息,工资相同时按仓库号降序排列SELECT*FROM 职工 ORDER BY 工资,仓库 DESC,15,5、简单的计算查询在SELECT语句中,可包含以下系统函数,以完成某种计算功能AVG()求平均值COUNT()统计记录个数MIN()求最小值MAX()求最大值SUM()求和,16,例14:找出供应商所在地的数目SELECT COUNT(DISTINCT 地址)FROM 供应商,例15:求支付工资的总数SELECT SUM(工资)FROM 职工,例16:求北京和上海的仓库职工的工资总和SELECT SUM(工资)FROM 职工WHERE 仓库号 IN(SELECT 仓库号 FROM 仓库 WHERE 城市=“北京”OR 城市=“上海”),例17:求在WH2仓库工作的职工的最高工资值SELECT MAX(工资)FROM 职工 WHERE 仓库号=“WH2”,17,6、分组与计算查询格式:SELECT FROM WHERE GROUP BY HAVING,例18:求每个仓库的职工的平均工资SELECT 仓库号,AVG(工资)FROM 职工GROUP BY 仓库号,例19:求至少有两个职工的每个仓库的平均工资SELECT 仓库号,COUNT(*),AVG(工资)FROM 职工 GROUP BY 仓库号 HAVING COUNT(*)=2注:COUNT(*)表示表中记录个数,18,7、连接查询(多表查询)格式:SELECT FROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE 说明:INNER JOIN=JOIN:内部连接LEFT JOIN:左连接RIGHT JOIN:右连接FULL JOIN:全连接,19,20,21,22,23,8、集合的并运算(UNION)将两个SELECT查询语句的结果通过并运算合成一个查询结果,要求两个查询结果具有相同的字段个数,对应字段要有相同的数据类型和取值范围,例24:求北京和上海的仓库信息SELECT*FROM 仓库 WHERE 城市=“北京”UNION SELECT*FROM 仓库 WHERE 城市=“上海”,24,9、显示部分结果SELECT TOP PERCENT FROM ORDER BY说明:TOP 子句须与ORDER BY 子句同时使用表示在符合条件的记录中选取的记录数,范围在132767排序后并列的若干项只算一项PERCENT表示百分比,此时为百分比的整数部分,范围在0.0199.99,25,例25:显示工资最高的三位职工的信息SELECT*TOP 3 FROM 职工 ORDER BY 工资 DESC,例26:显示工资最低的那30%职工信息SELECT*TOP 30 PERCENT FROM 职工 ORDER BY 工资,26,10、查询结果的存放(1)INTO 目标可为:ARRAY:查询结果输出到数组CURSOR:查询结果输出到临时表DBF:查询结果输出到表(2)TO 子句TO FILE:查询结果输出到指定的 文本文件TO PRINTER:查询结果输出到打印机TO SCREEN:查询结果输出到屏幕,