二级vfp_04第四章 关系数据库标准语言sql

上传人:今*** 文档编号:108092477 上传时间:2019-10-22 格式:PPT 页数:55 大小:711.50KB
返回 下载 相关 举报
二级vfp_04第四章 关系数据库标准语言sql_第1页
第1页 / 共55页
二级vfp_04第四章 关系数据库标准语言sql_第2页
第2页 / 共55页
二级vfp_04第四章 关系数据库标准语言sql_第3页
第3页 / 共55页
二级vfp_04第四章 关系数据库标准语言sql_第4页
第4页 / 共55页
二级vfp_04第四章 关系数据库标准语言sql_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《二级vfp_04第四章 关系数据库标准语言sql》由会员分享,可在线阅读,更多相关《二级vfp_04第四章 关系数据库标准语言sql(55页珍藏版)》请在金锄头文库上搜索。

1、主讲老师:韩维良,2012.3,VFP程序设计,第四章,关系数据库标准 语言SQL,第一节 SQL概述 SQL(Structured Query Language)是结构化的数据库查询语言,包含数据定义、数据操纵和数据控制。 几乎被认为是一种万能语言,或者是一种数据库标准语言,多种数据库系统都支持SQL语言,动态网页后台数据库的操作都可以用该语言实现。 从VF的角度来谈,VF能实现的功能,SQL都能实现。,SQL语言非常简洁。,SQL命令动词,SELECT语句的格式: SELECT 字段列表 FROM 表列表 WHERE GROUP BY 字段名HAVING UNION ORDER BY 字段

2、名 功能:在一个或多个表中将满足条件的多个字段显示出来。,SELECT:欲查询的字段列表,用逗号分隔。 FROM:欲查询的数据表,即数据来源,可以是单个表,也可以是多个表。 WHERE:查询条件,即查询满足条件的记录。 GROUP BY:用于对查询结果进行分组,可以利用它进行分组汇总。 HAVING:必须跟随GROUP BY 短语使用,它用来限定分组必须满足的条件。 ORDER BY:用来对查询的结果进行排序。,说明数据之间的联系,如职工在哪个城市工作,一、简单查询 例 从职工表中检索所有的工资值。 (设置默认路径:set default to d:xyz) SELECT 工资 FROM 职工

3、 SELECT DISTINCT 工资 FROM 职工 去掉查询结果中的重复值。 例 检索仓库表中的所有元组。 SELECT * FROM 仓库 等价于SELECT 仓库号,城市,面积 FROM 仓库 *是通配符,表示所有属性,即表示所有字段。,例 检索工资大于1230元的职工号 SELECT 职工号 FROM 职工 WHERE 工资1230 例 检索哪些仓库有工资多于1210元的职工 SELECT DISTINCT 仓库号 FROM 职工 WHERE 工资1210 例 给出在仓库”WH1”或”WH2”工作,并且工资少于1250元的职工 SELECT 职工号 FROM 职工 WHERE 工资1

4、250 AND (仓库号=“WH1” OR 仓库号=”WH2”),二、联接查询 联接查询是一种基于多个表的查询。在多个表中找出满足条件的记录。 例 找出工资多于1230元的职工号和他们所在的城市。 SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (工资1230) AND(职工.仓库号=仓库.仓库号) 线索:通过仓库号找到对应的城市。 说明:分号是续行符,有时将一条语句写在几行上,其结构看得更清楚。,例 找出工作在面积大于400的仓库的职工号以及这些职工所在的城市 SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (面积400) AND(职工.仓库号=仓库.仓库

5、号),三、嵌套查询 多个查询可以嵌套执行。 基于多个表的查询,这类查询所要求的结果出自一个表,但相关的条件却涉及多个表。 例 哪些城市至少有一个仓库的职工工资为1250元(工资和城市字段不在一个表中) 分析:此例查询仓库表中的城市信息,而查询条件是职工表中的工资字段值。 SELECT城市 FROM 仓库 WHERE 仓库号 IN ; (SELECT 仓库号 FROM 职工 WHERE 工资=1250),例 查询所有职工的工资都大于1210元的仓库信息 核心在“都大于”上,如下的命令是错的: SELECT * FROM 仓库 WHERE 仓库号 IN ; (SELECT 仓库号 FROM 职工

6、WHERE 工资1210) 都大于不好表示的话,可以反过来考虑。 分析:此例也可描述为“没有一个职工的工资少于或等于1210元的仓库的信息” SELECT * FROM 仓库 WHERE 仓库号 NOT IN ; (SELECT 仓库号 FROM 职工 WHERE 工资=1210),例找出和职工E4挣同样工资的所有职工 SELECT 职工号 FROM 职工 WHERE 工资=; (SELECT 工资 FROM 职工 WHERE 职工号=”E4”) 先求出E4的工资。 特别注意这里的等于号的用法。,四、几个特殊的运算符 1、BETWEENAND表示在二者之间。 2、LIKE表示像什么一样,用于字

7、串匹配。 3、!= 在SQL表示不等于,也可以等号表达式加NOT的方法构造。,例 检索出工资在1220元到1240元范围内的职工信息; SELECT * FROM 职工 WHERE 工资 BETWEEN 1220 AND 1240 注意表达方法,等价于: SELECT * FROM 职工 WHERE (工资 =1220) AND (工资=1240),例 从供应商表中检索出全部公司的信息,不要工厂或其他供应商的信息 匹配字符串查询,使用LIKE运算符 SELECT * FROM 供应商 WHERE 供应商名 LIKE “%公司” 匹配符% :表示0个或多个字符 匹配符_ : (下划线)表示一个字

8、符,五、排序 使用SQL SELECT 可以将查询结果排序,使用短句ORDER BY ORDER BY 排序项1ASC|DESC,排序项2ASC|DESC 即允许按照一列或多列数据的大小排序,可以按升序排序,也可以按照降序排序,缺省为升序,若使用降序,应使用DESC参数。,例 按职工的工资值升序检索出全部职工信息 SELECT * FROM 职工 ORDER BY 工资 降序: SELECT * FROM 职工 ORDER BY 工资 DESC 例先按仓库号排序,再按工资排序并输出全部职工信息 SELECT * FROM 职工 ORDER BY 仓库号,工资,六、简单的计算查询 用于计算检索的

9、函数有: COUNT-计数,即统计记录数。 SUM-求和,即求字段的总和。 AVG-计算平均值,即求指定字段的平均值。 MAX-求最大值,即求字段的最大值。 MIN -求最小值,即求字段的最小值。,例 找出供应商所在地的数目 SELECT COUNT(DISTINCT 地址) FROM 供应商 也可以给新的数据起一个名称。如统计仓库数: SELECT COUNT(DISTINCT 仓库号) AS 仓库数 FROM 职工 注意:除非对表中的元组个数进行计数,一般COUNT函数应该使用DISTINCT。 例如: SELECT COUNT(*) FROM 供应商 例求支付的工资总数 SELECT S

10、UM(工资) FROM 职工,例 检索全体职工的平均工资 SELECT AVG(工资) FROM 职工 例 求北京和上海的仓库职工的工资总和 SELECT SUM(工资) FROM 职工 WHERE 仓库号 IN (SELECT 仓库号 FROM 仓库 WHERE 城市=”北京” OR 城市=”上海”) 重点掌握:COUNT SUM AVG,七、分组与计算查询 利用GROUP BY 进行分组计算(即按组计算)查询,GROUP BY 短语的格式如下: GROUP BY 分组列表 HAVING FilterCondition SELECT 仓库号,AVG(工资) FROM 职工全体职工的平均工资

11、例 求每个仓库的职工的平均工资 SELECT 仓库号,AVG(工资) FROM 职工 GROUP BY 仓库号,HAVING FilterCondition:表示分组统计时的条件,只能结合Group使用。 如统计至少有两个职工的每个仓库中最高工资。 Select 仓库号,Count(*),MAX(工资) From 职工; Group By 仓库号 Having Count(*)=2 注意:如果没有计算函数,只分组,则每组只显示一个记录(每组的最后一个记录)。,八、利用空值查询 前提:数据库中的表设置有效性规则使字段值默认为NULL。或者在自由表的表设计器中允许某个字段为NULL,然后可用REP

12、LAY语句为该字段赋值NULL。 例 找出尚未确定供应商的订购单 SELECT * FROM 订购单 WHERE 供应商号 IS NULL 注意:查询空值时要使用IS NULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用“=”这样的运算符进行比较。 例 列出已经确定了供应商的订购单信息 SELECT *FROM 订购单 WHERE 供应商号 IS NOT NULL,九、别名与自然连接查询 在联接操作中,经常需要使用表名作为前缀,有时这样做显得很麻烦.因此,SQL允许在FROM短语中为表定义别名; 中间用空格 Select * from 职工 Z,仓库 S Where Z.仓库号

13、S.仓库号,十、使用量词和谓词的查询 ANY|ALL|SOME(子查询) NOTEXISTS (子查询) ANY, ALL, SOME是量词,其中ANY和SOME是同义词,在进行比较运算时,只要子查询中有一行能使结果为真,则结果就为真;而ALL 则要求子查询中的所有行都为真,结果才为真. EXIST是谓词,EXISTS 或 NOT EXISTS是用来检查子查询中是否有结果返回,即存在元组或不存在元组.,例如:检索那些仓库中还没有职工的仓库的信息。 Select * from 仓库 where Not Exists; (select * from 职工 where 职工.仓库号=仓库.仓库号)

14、例如:检索有职工的工资大于或等于WH1仓库中任何一个职工工资的仓库号。 Select distinct 仓库号 from 职工 where 工资=ANY; (Select 工资 from 职工 where 仓库号=“WH1”),十一、超联接查询 从两个表中提取数据时使用。普通联结如: 例 找出工资多于1230元的职工号和他们所在的城市。 SELECT 职工号,城市 FROM 职工,仓库 ; WHERE (工资1230) AND(职工.仓库号=仓库.仓库号) 超联接查询首先保证一个表中满足条件的元组都在结果表中,然后将满足联接条件的记录与另一个表的记录进行联接,不满足联接条件的则将应来自另一表的

15、属性值置为空值.,“*=”左联接,含义是在结果表中包含第一个表中满足条件的所有记录;如果有在联接条件上匹配的 记录,则第二个表返回相应值,否则返回空值. “=*”右联接,含义是在结果表中包含第二个表中满足条件的所有记录;如果有在联接条件上匹配的记录,则第一个表返回相应值,否则返回空值. VF中不支持这两个运算符,VF中用Join运算符。 左联接:Left join 右联接:Right Join,如:按仓库号相等的原则联接仓库表与职工表 Select 仓库.仓库号,城市,面积,职工号,工资; From 仓库 Left join 职工 on 仓库.仓库号=职工.仓库号 注意:联接是在From部分,

16、而非Where部分。 说明:以左表为主,当右表中没有匹配的记录时,对应数据显示NULL。,十二、集合的并运算 SQL 支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。为了进行并运算,要求这样的查询结果具有相同的字段个数,并且对应字段的值要出自同一个值域,即具有相同的数据类型和取值范围。 例:查询北京和上海的仓库信息 SELECT * FROM 仓库 WHERE 城市=”北京” UNION SELECT * FROM 仓库 WHERE 城市=”上海”,十三、Visual Foxpro中SQL SELECT 的几个特殊选项 显示部分结果 例 只显示前几项记录 使用TOP nExpr PERCENT TOP 要与ORDER BY同时使用才有效,显示满足条件的前几个记录。,将查询结果放在数组中 使用INT

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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