Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言

上传人:E**** 文档编号:89405954 上传时间:2019-05-24 格式:PPT 页数:95 大小:752.50KB
返回 下载 相关 举报
Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言_第1页
第1页 / 共95页
Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言_第2页
第2页 / 共95页
Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言_第3页
第3页 / 共95页
Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言_第4页
第4页 / 共95页
Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言》由会员分享,可在线阅读,更多相关《Visual FoxPro程序设计 (第二版)刘丽 编著 第5章 SQL语言(95页珍藏版)》请在金锄头文库上搜索。

1、Visual FoxPro 程序设计(第二版),第5章 关系数据库标准语言SQL,5.1 SQL概述,SQL(Structured Query Language) SQL包含数据定义 数据操纵和数据控制 SQL语言具有如下特点: 1.综合统一 SQL语言是一种一体化语言,它包括数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动中的全部工作。 2. 高度非过程化,5.1.1 SQL的主要特点,SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需要描述清楚用户要“做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。,SQL语言采用集合操

2、作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。,3面向集合的操作方式,4以同一种语法结构提供两种使用方式,SQL语言既是自含式语言,又是嵌入式语言。,5. SQL语言非常简洁。见下表,VFP在SQL方面提供支持数据定义、数据查询和数据操纵功能,没有提供数据控制功能 。,SQL命令动词,5.1.2 SQL语言的基本概念,1SQL语言的模式结构 SQL语言支持关系数据库三级模式结构。其中外模式对应于视图(View)和部分基本表(Base Table),模式对应于基本表,内模式对应于存储文件。 (1) 基本表 基本表是本身独立存在的表,在SQL中一个关系

3、就对应一个表。一些基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。 (2) 存储文件 存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理文件结构是任意的。,l 视图 视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。 用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系,而存储文件对用户是透明的。 2SQL语言的使用 SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。VFP采用了后者。

4、VFP在SQL方面提供支持数据定义、数据查询和数据操纵功能,但没有提供数据控制功能。,5.2 查询功能,SQL的核心是查询。SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询模块组成,多个查询可以嵌套执行。 VFP的SQL SELECT 命令的语法格式如下: SELECT 字段列表 FROM 表列表 WHERE GROUP BY .HAVING UNION ORDER BY ,SELECT说明要查询的数据 FROM说明要查询的数据来自哪个或哪些表,可以对单个表或多个表进行查询; WHERE说明查询条件,即选择元组的条件; GROUP BY短语用于对查询

5、结果进行分组,可以利用它进行分组汇总; HAVING短语必须跟随GROUP BY 短语使用,它用来限定分组必须满足的条件; ORDER BY 用来对查询的结果进行排序。,订货管理系统数据库,5.2.1 简单查询,例51 从职工关系中检索所有的工资值。 SELECT 工资 FROM 职工 SELECT DISTINCT 工资 FROM 职工 去掉查询结果中的重复值。 例52 检索仓库关系中的所有元组。 SELECT * FROM 仓库 等价于SELECT 仓库号,城市,面积 FROM 仓库,简单查询是SQL语言中最简单的查询操作,这些查询都基于单个表,可以带有简单的条件。由SELECT-FROM

6、短语构成无条件查询,或由SELECT-FROM-WHERE短语构成条件查询。,举 例,例5.3 检索工资多于2220元的职工号 SELECT 职工号 FROM 职工 WHERE 工资2220 例5.4 检索哪些仓库有工资多于2220元的职工 SELECT DISTINCT 仓库号 FROM 职工 ; WHERE 工资2220,举 例,例5.5 给出仓库”SH1”或”SH2”工作,并且工资少于2250元的职工 SELECT 职工号 FROM 职工 ; WHERE 工资2250 AND; (仓库号=“SH1” OR仓库号=”SH2”) 以上检索只基于一个关系,5.2.2 简单的联接查询,联接查询是

7、一种基于多个关系的查询. 例5.6 找出工资多于2230元的职工号和他们所在的城市 SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (工资2230) AND(职工.仓库号=仓库.仓库号) 仓库关系和职工关系之间存在一个一对多的联系。 例5.7 找出工作在面积大于1400的仓库的职工号以及这些职工所在的城市 SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (面积1400) AND(职工.仓库号=仓库.仓库号),5.2.3 嵌套查询,基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。 当检索关系X中的元组时,它的条件依赖于相关的关

8、系Y中的元组属性值,这时使用嵌套查询. 例5.8 哪些城市至少有一个仓库的职工工资为2250元 分析:此例要求查询仓库表中的城市信息,而查询条件是职工表中的工资字段值. SELECT城市 FROM 仓库 WHERE 仓库号 IN ; (SELECT 仓库号 FROM 职工 WHERE 工资=2250),举 例,例5.9 查询所有的职工工资都多于2210元的仓库的信息 分析:此例也可描述为”没有一个职工的工资少于或等于2210元的仓库的信息 SELECT * FROM 仓库 WHERE 仓库号 NOT IN ; (SELECT 仓库号 FROM 职工 WHERE 工资=2210),“武汉”的“S

9、H4”仓库还没有职工,但该仓库的信息也被检索出来了。,举 例,排除那些还没有职工的仓库,检索要求描述为: 查询所有的职工工资都多于2210元的仓库的信息,并且该仓库至少要有一名职工. SELECT * FROM 仓库 WHERE 仓库号 NOT IN ; (SELECT 仓库号 FROM 职工 WHERE 工资=2210) ; AND仓库号IN (SELECT 仓库号 FROM 职工),举 例,例5.10 找出和职工A4挣同样工资的所有职工 SELECT 职工号 FROM 职工 WHERE 工资=; (SELECT 工资 FROM 职工 WHERE 职工号=”A4”),5.2.4 排序查询,使

10、用SQL SELECT 可以将查询结果排序,使用短句ORDER BY ORDER BY, Order_Item ASC|DESC, Order_Item ASC|DESC 例 5.11 按职工的工资值升序检索出全部职工信息 SELECT *FROM 职工 ORDER BY 工资 降序: SELECT *FROM 职工 ORDER BY 工资 DESC,举 例,例5.12 先按仓库号排序,再按工资排序并输出全部职工信息 SELECT * FROM 职工 ORDER BY 仓库号,工资 注意:ORDER BY 是对最终的查询结果进行排序,不可以在子查询中使用该短语,5.2.5 简单的计算查询,用于

11、计算检索的函数有: (1) COUNT-计数 (2) SUM-求和 (3) AVG-计算平均值 (4) MAX-求最大值 (5) MIN -求最小值 这些函数可以用在SELECT短语中对查询结果进行计算,举 例,例5.13 找出供应商所在地的数目 SELECT COUNT (DISTINCT 地址) FROM 供应商 注意:除非对关系中的元组个数进行计数,一般COUNT函数应该使用DISTINCT. 例如: SELECT COUNT(*) FROM 供应商 例5.14. 求支付的工资总数 SELECT SUM(工资) FROM 职工,若使用SELECT SUM(DISTINCT工资) FROM

12、 职工,举例,例5.15 求北京和上海的仓库职工的工资总和 SELECT SUM(工资) FROM 职工 WHERE 仓库号 IN ; (SELECT 仓库号 FFROM 仓库 WHERE 城市=”北京” OR; 城市=”上海”),例5.16 求所有职工的 工资都多于2210元的仓库的平均面积 SELECT AVG(面积) FROM 仓库 WHERE 仓库号 NOT IN ; (SELECT 仓库号 FFROM 职工 WHERE 工资=2210) 注意: 以上结果包含了尚没有职工的SH4仓库,如果要排除没有职工的仓库,以上语句应改为: SELECT AVG(面积) FROM 仓库 WHERE

13、仓库号 NOT IN ; (SELECT 仓库号 FFROM 职工 WHERE 工资=2210); AND 仓库号 IN (SELECT 仓库号 FROM 职工),例5.17 求在SH2仓库工作的职工的最高工资值 SELECT MAX(工资) FROM 职工 WHERE 仓库号=”SH2” 求最低工资值: SELECT MIN(工资) FROM 职工 WHERE 仓库号=”SH2”,5.2.6 分组与计算查询,利用GROUP BY 进行分组计算查询,GROUP BY 短语的格式如下: GROUP BY GroupColumn ,GroupColumnHAVING FilterCondition

14、 例5.18 求每个仓库的 职工的平均工资 SELECT 仓库号,AVG(工资) FROM 职工; GROUP BY 仓库号,举 例,例5.19 求至少有两个职工的每个仓库的平均工资 SELECT 仓库号,COUNT(*),AVG(工资) FFROM 职工 ; GROUP BY 仓库号 HAVING COUNT(*)=2 HAVING子句总是跟在GROUP BY 子句之后,不可以单独使用. HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组.,5.2.7 利用空值查询,例5.20 找出尚未确定供应商的订购单 SELECT

15、 * FROM 订购单 WHERE 供应商号 IS NULL 注意:查询空值时要使用IS NULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较。 例5.21 列出已经确定了供应商的订购单信息 SELECT *FROM 订购单 WHERE 供应商号 IS NOT NULL,5.2.8 别名与自然连接查询,在联接操作中,经常需要使用关系名作为前缀,有时这样做显得很麻烦.因此,SQL允许在FORM短语中为关系名定义别名 例5.22 为基于4个关系的联接查询,设置关系名的别名。 SELECT 供应商名 FROM 供应商,订购单,职工,仓库; WHERE 地址=

16、”北京” AND 城市=”北京”; AND 供应商.供应商号=订购单.供应商号; AND 订购单.职工号=职工.职工号; AND 职工.仓库号=仓库.仓库号,举 例,使用别名的联接嵌套查询 例5.23 使用别名的联接嵌套查询 SELECT 供应商名 FROM 供应商 S,订购单 P,职工 E ,仓库 W; WHERE 地址=”北京” AND 城市=”北京”; AND S.供应商号=P.供应商号; AND P.职工号=E.职工号; AND 职工E.仓库号=W.仓库号 以上例子中,别名不是必须的,但在关系的自然联接中,别名是必不可少的.,自然联接,什么是自然联接? SQL不仅可以对多个关系实行联接操作,也可以将同一个关系与其自身进行联接,这种联接就称为自然联接. 在可以进行这种自然联接的关系中,实际存在着一种特殊的递归关系,即关系中的一些元组,根据出自同一值域的两个不同的属性,可以与另外的一些元组有一种对应关系(一对多联系).,举例,假设雇员关系: 雇员(雇员号

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

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

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