Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章

上传人:E**** 文档编号:89352775 上传时间:2019-05-23 格式:PPT 页数:74 大小:396.50KB
返回 下载 相关 举报
Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章_第1页
第1页 / 共74页
Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章_第2页
第2页 / 共74页
Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章_第3页
第3页 / 共74页
Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章_第4页
第4页 / 共74页
Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章》由会员分享,可在线阅读,更多相关《Visual FoxPro 6.0程序设计教程 第二版 教学课件 ppt 作者 丁爱萍 第11-15章 第14章(74页珍藏版)》请在金锄头文库上搜索。

1、14.1 SQL的查询功能 14.2 SQL的定义功能 14.3 SQL的数据修改功能 习题14,查询是SQL的核心。SQL的查询命令也称做SELECT命令,它的基本形式由SELECTFROMWHERE查询块组成,多个查询可以嵌套执行。SQL查询命令的语法格式为 SELECT ALL | DISTINCT Alias. Select_Item AS Column_Name , Alias. Select_Item AS Column_Name . FROM DatabaseName!Table AS Local_Alias INNER | LEFT OUTER | RIGHT OUTER |

2、FULL OUTER JOIN DatabaseName! Table AS Local_AliasON JoinCondition INTO Destination,14.1 SQL的查询功能,说明: (1) SELECT说明要查询的数据。 (2) FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询。 (3) WHERE说明查询条件,即选择元组的条件。 (4) GROUP BY短语用于对查询结果进行分组,可以利用它进行分组汇总。,(5) HAVING短语必须跟随GROUP BY使用,用来限定分组必须满足的条件。 (6) ORDER BY短语用来对查询的结果进行排序。 下面

3、以订货管理数据库为例,介绍SQL语言的使用方法。 假设已经建立了“订货管理数据库”及其4个数据表,即“职工表”、“仓库表”、“订购单表”和“供应商表”,具体内容如表14-1表14-3所示。,表14-1 职 工 表,表14-2 仓 库 表,表14-3 订 购 单 表,表14-3中,Null表示空值,含义为还没有确定供应商,当然也就没有确定订购日期。,表14-4 供 应 商 表,14.1.1 简单查询 简单查询是基于单个表或者有简单查询条件的查询。这样的查询由SELECT和FROM短语构成无条件查询,或者由SELECT、FROM和WHERE短语构成条件查询。,【例14-1】从职工表中检索所有职工的

4、工资额。 用SQL语言描述为 SELECT 工资额 FROM 职工表 检索结果为 800 1000 1100 900 1000 该查询结果中有重复值,如果需要去掉其中的重复值,可以加上DISTINCT短语: SELECT DISTINCT 工资额 FROM 职工表,【例14-2】检索仓库表中的所有元组。 可以使用通配符 * 表示所有属性(即字段): SELECT * FROM 仓库表 该命令等价于: SELECT 仓库号 , 面积 , 地点 FROM 仓库表 检索结果为 A01 50 郑州 A02 100 北京 A03 70 长沙 A04 80 广州,【例14-3】检索工资额多于1000元的职

5、工号。 用WHERE短语指定查询条件(查询条件可以是任意复杂的逻辑表达式): SELECT 职工号 FROM 职工表 WHERE 工资额 1000 查询结果为 B4,【例14-4】检索在仓库A01或A02工作,且工资额少于1000元的职工号。 SELECT 职工号 FROM 职工表 ; WHERE 工资额 1000 AND (仓库号=“A01” OR 仓库号=“A02”) 查询结果为 B1 以上的示例中,在FROM后只指定了一个关系,也就是说,这些检索只基于一个关系。,14.1.2 联接查询 联接是关系的基本操作之一,联接查询是一种基于多个关系的查询。 当FROM之后的多个关系中含有相同的属性

6、名时,这时必须用关系前缀直接指明属性的所属关系,如“职工表.仓库号”中,“.”前面是关系名,后面是属性名。,【例14-5】检索工资额大于1000元的职工的职工号和他们所在的地点。 题中要求检索的信息(职工号、地点)分别来自职工表和仓库表两个关系,这样的检索是基于多个关系的,此类查询一般用联接查询来实现。本题中的联接条件为“职工表.仓库号 = 仓库表.仓库号”。 SELECT 职工号 , 地点 FROM 职工表 , 仓库表 ; WHERE ( 工资额 1000) AND ( 职工表.仓库号 = 仓库表.仓库号 ),查询结果为 B4 北京 【例14-6】查询工作在仓库面积大于90的职工的职工号以及

7、这些职工工作的地点。 SELECT 职工号 , 地点 FROM 职工表 , 仓库表 ; WHERE ( 面积 90) AND ( 职工表.仓库号 = 仓库表.仓库号 ) 查询结果为 B1 北京 B4 北京,14.1.3 嵌套查询 嵌套查询也是基于多个关系的查询,这类查询所要求的结果来自一个关系,但是相关的条件却涉及多个关系。在前面的例子中,WHERE之后是一个相对独立的条件,该条件为真或假。但是有时需要用另外的方式来表达检索要求,例如,当检索关系X的元组时,它的条件依赖于相关的关系Y中的元组属性值,这时使用SQL的嵌套查询功能将比较方便。,【例14-7】查询至少有一个仓库的职工其工资额为100

8、0元的地点。 该例要求查询仓库表中的地点信息,而查询条件是职工表的工资额字段值,为此可以使用如下的嵌套查询: SELECT 地点 FROM 仓库表 WHERE 仓库号 IN ; ( SELECT 仓库号 FROM 职工表 WHERE 工资额 = 1000 ) 查询结果为 郑州,该题的命令中使用了两个SELECTFROMWHERE查询块,即内层查询块和外层查询块,内层查询块检索到的仓库号值是A01,这样就可以写出等价的命令: SELECT 地点 FROM 仓库表 WHERE 仓库号 IN ( “A01” )这里的IN相当于集合运算符。 【例14-8】查询所有职工的工资额都多于800元的仓库信息。

9、 该检索条件也可以描述为:没有一个职工的工资额少于或等于800元的仓库信息。SQL命令为 SELECT * FROM 仓库表 WHERE 仓库号 NOT IN ; ( SELECT 仓库号 FROM 职工表 WHERE 工资额 = 800 ),查询结果为 A01 50 郑州 A03 70 长沙 A04 80 广州 内层SELECTFROMWHERE查询块指出所有职工的工资额少于或等于800元的仓库号值的集合,在这里该集合只有一个值“A02”。然后从仓库关系中检索元组的仓库号属性值不在该集合中的每个元组。,从该例的结果中可以看出,结果中有A04,但是A04仓库中还没有职工。因此,可以再排除还没有

10、职工的仓库,SQL命令为 SELECT * FROM 仓库表 WHERE 仓库号 NOT IN ; ( SELECT 仓库号 FROM 职工表 WHERE 工资额 = 800 ) ; AND 仓库号 IN ( SELECT 仓库号 FROM 职工表),14.1.4 几个特殊的运算符 在进行复杂的涉及多个关系的检索时,常常用到几个特殊的运算符,即BETWEENAND和LIKE等。 BETWEENAND表示值的范围;LIKE表示字符串匹配运算符。,【例14-9】查询工资额在900元到1050元范围内的职工信息。 SQL命令为 SELECT * FROM 职工表 WHERE 工资额 BETWEEN

11、900 AND 1050 查询结果为 B3 A01 1000 B6 A03 900 B7 A01 1000 该命令中:“BETWEEN 900 AND 1050”等价于: ( 工资额 = 900 ) AND ( 工资额 = 1050 ),【例14-10】从供应商关系中检查全部公司的信息(不要工厂或其他供应商的信息)。 SQL命令为 SELECT * FROM 供应商表 WHERE 供应商名 LIKE “*公司” 查询结果为 C4 长江通用设备公司 南昌 C7 双飞公司 上海,【例14-11】查询不在郑州的全部供应商信息。 在SQL中,“不等于”用“!=”表示。SQL命令为 SELECT * F

12、ROM 供应商表 WHERE 地址 != “郑州” 查询结果为 C4 长江通用设备公司 南昌 C6 迎宾厂 广州 C7 双飞公司 上海 也可以用NOT运算符写出等价的SQL命令: SELECT * FROM 供应商表 WHERE NOT ( 地址 = “郑州“ ),14.1.5 排序 使用SQL中的SELECT还可以将查询结果进行排序,排序的短语是ORDER BY。格式为 ORDER BY Order_Item ASC | DESC , Order_Item ASC | DESC . 其中,ASC表示升序,DESC表示降序。缺省时为升序。,【例14-12】按职工的工资额升序检索出全部职工信息。

13、 SELECT * FROM 职工表 ORDER BY 工资额 查询结果为 B1 A02 800 B6 A03 900 B3 A01 1000 B7 A01 1000 B4 A02 1100 如果需要按降序排序,只要加上DESC选项即可: SELECT * FROM 职工表 ORDER BY 工资额 DESC,【例14-13】先按仓库号排序,再按工资额升序排序并输出全部职工信息。 SELECT * FROM 职工表 ORDER BY 仓库号 , 工资额查询结果为 B3 A01 1000 B7 A01 1000 B1 A02 800 B4 A02 1100 B6 A03 900,14.1.6 简

14、单的计算查询 SQL不仅具有一般的检索能力,而且还有较强的计算检索能力,比如检索职工的平均工资、检索某个仓库中职工的最高工资额等。用于计算检索的函数有COUNT(计数)、SUM(求和)、AVG(求平均值)、MAX(求最大值)和MIN(求最小值)。 【例14-14】找出供应商所在地的数目。 SELECT COUNT( DISTINCT 地址) FROM 供应商表 结果为4。,在该命令中,配合COUNT使用了DISTINCT选项,表示消除重复内容。如果需求出供应商表中的记录数,则命令为 SELECT COUNT ( * ) FROM 供应商表 【例14-15】求支付的工资总数。 SELECT SU

15、M ( 工资额 ) FROM 职工表 结果为4800。 【例14-16】求所有职工的工资都多于900元的仓库的平 均面积。 该例中,应该排除没有职工的仓库,命令为 SELECT AVG ( 面积 ) FROM 仓库表 WHERE 仓库号 NOT IN ; ( SELECT 仓库号 FROM 职工表 WHERE 工资额 = 900 ) AND 仓库号 IN ( SELECT 仓库号 FROM 职工表 ) 结果为70。,【例14-17】求职工的最高工资。 SELECT MAX ( 工资额 ) FROM 职工表结果为1100。,14.1.7 分组与计算查询 SQL中,可以利用GROUP BY子句进行分组计算查询。可以按一列或多列分组,也可以用HAVING进一步限定分组的条件。GROUP BY子句的格式为 GROUP BY GroupColumn , GroupColumn . HAVING FilterCondition,【例14-18】求每个仓库的职工的平均工资。 该查询中,首先要按仓库号属性进行分组,然后再计算每个仓库的平均工资。 SELECT 仓库号 , AVG ( 工资额 ) FROM 职工表 GROUP BY 仓库号 结果为 A01 1000 A02 950 A03 900,【例14-19】求至少有两个职工的每个仓库的平

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号