资源预览内容
第1页 / 共114页
第2页 / 共114页
第3页 / 共114页
第4页 / 共114页
第5页 / 共114页
第6页 / 共114页
第7页 / 共114页
第8页 / 共114页
第9页 / 共114页
第10页 / 共114页
亲,该文档总共114页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Visual FoxPro程序设计(等级考试版)第4章 关系型数据库标准语言 SQLVisual FoxPro程序设计(等级考试版)内容提要4.1 SQL概述 4.2 查询功能 4.3 操作功能 4.4 定义功能 4.5 典型例题解析 4.6 小型案例实训 4.7 本章小结 4.8 习题Visual FoxPro程序设计(等级考试版)4.1 SQL概述SQLStructured Query Language(结构化查询语 言)的缩写 SQL目前已成为关系数据库的标准语言。 现在所有的关系型数据库管理系统都支持SQL, VFP也不例外。 SQL包含了数据定义、数据操纵和数据控制功能 。Visual FoxPro程序设计(等级考试版)SQL的主要特点l SQL是一种一体化的语言,它包含数据定义、数据 查询、数据操纵和数据控制等方面的功能,可以完成 数据库活动中的全部工作。l SQL是一种高度非过程化的语言l SQL非常简洁l SQL可以直接以命令方式交互使用,也可以嵌入到 程序设计语言中以程序方式使用。Visual FoxPro程序设计(等级考试版)表4-1 SQL命令动词SQL功能命令动词数据查询 SELECT 数据定义 CREATE、DROP 、ALTER 数据操纵 INSERT、UPDATE、DELETE数据控制 GRANT、REVOKE u SQL命令动词Visual FoxPro程序设计(等级考试版)4.2 查 询 功 能 查询是SQL的核心 SQL的查询命令SELECT SQL-SELECT命令可以从一个表或多个表或视图 中检索数据Visual FoxPro程序设计(等级考试版)4.2.1 创建SELECT命令 l SELECT命令详解:(略)Visual FoxPro程序设计(等级考试版)4.2.1 创建SELECT命令 可以在以下3个区域中创建SELECT命令:在命令窗口中在VFP程序中在查询设计器中Visual FoxPro程序设计(等级考试版)4.2.2 简单查询简单查询是针对单个表的查询 查询仅涉及一个表,是一种最简单的查询。 无条件查由SELECT和FROM短语构成无条件查询SELECT select_Item FROM TableName 条件查询由SELECT、FROM和WHERE短语构成 条件查询 SELECT select_Item FROM TableName WHERE FilterCondition指定查 询条件Visual FoxPro程序设计(等级考试版)4.2.2 简单查询例4.1 从zg关系中检索所有职工的工资值。SELECT 工资 FROM zg结果显示如图4-2所示:图4-2 检索所有的工资值 Visual FoxPro程序设计(等级考试版)例:检索zg关系的所有元组。SELECT 仓库号,职工号,工资 FROM zg或SELECT * FROM zg查询结果 :Visual FoxPro程序设计(等级考试版)例4.2 从zg关系中检索工资多于1220元的职工号。SELECT 职工号 FROM zg WHERE 工资1220 结果显示如图4-3所示:图4-3 检索工资结果Visual FoxPro程序设计(等级考试版)例4.3 检索在仓库WH2或WH1工作,并且工资少于 1250元的职工的职工号。SELECT 职工号 FROM zg WHERE (仓库号=“WH2” OR 仓库号=“WH1”) AND 工资1210结果显示如下图所示:上面结果中“WH2”出现了两次,显然是重复的,我们 并不希望看到这种情况的发生,为此我们可以使用 DISTINCT短语来消除查询中的重复结果(重复行)。Visual FoxPro程序设计(等级考试版)加入 DISTINCT 后的SELECT命令如下:SELECT DISTINCT 仓库号 FROM zg WHERE 工资1210结果显示如下图所示:Visual FoxPro程序设计(等级考试版)4.2.3 简单的连接查询 简单的连接查询是一类基于多个表的查询 一个数据库中的多个表之间一般都存在某种内在联系 ,它们共同提供有用的信息。 如果一个查询同时涉及两个以上的表,则称为连接查 询。 其基本格式是: SELECT select_Item1,select_Item2 FROM TableName1, TableName2 WHERE JoinCondition注:当FROM之后的多个关系中含有相同的属性名时, 引用该属性名必须用关系前缀指明属性所属的关系,即 TableName.属性名,“.”前面的是关系名,后面是属性 名。Visual FoxPro程序设计(等级考试版)4.2.3 简单的连接查询例4.4 找出工作在面积大于340的仓库的职工的职工号 和职工所在的城市。 SELECT 职工号,城市 FROM ck,zg; WHERE ck.仓库号=zg.仓库号 AND 面积340 结果显示如下图所示:Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询嵌套查询在SQL中,可以将一个select查询语句嵌 入到另一个select查询语句中,这称为嵌套查询。l 将内嵌的select语句称为子查询。l 标准的SQL允许子查询可以嵌套多层,但在VFP中 ,不允许多层嵌套,即子查询不能再嵌套了。 l 一般来说,当查询所要求的结果出自一个关系,但 查询条件却涉及多个关系时。例如,当检索关系X中的 元组时,它的条件依赖于相关的关系Y中的元组的属性 值,这时使用SQL的嵌套查询功能将非常方便。Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询嵌套查询的一般格式为: SELECT select_Item1 FROM TableName1 WHERE FilterCondition1 IN; (SELECT select_Item2 FROM TableName2 WHERE FilterCondition2)注:内嵌的子查询要用圆括号括起来。Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询例4.5 查询哪些城市的仓库至少有一个职工工资为1220 元? 嵌套查询: SELECT 城市 FROM ck WHERE 仓库号 IN; (SELECT 仓库号 FROM zg WHERE 工资=1220)结果显示如下图所示:Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询例4.6 查询和职工E4工资相同的所有职工的记录嵌套查询: SELECT * FROM zg WHERE 工资; (SELECT 工资 FROM zg WHERE 职工号=“E4”)结果显示如下图所示:Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询例:查询具有最高工资的职工的信息。 嵌套查询: SELECT * FROM zg WHERE 工资; (SELECT MAX(工资) FROM zg)结果显示如下图所示:Visual FoxPro程序设计(等级考试版)4.2.4 嵌套查询思考:查询有职工的工资高于“E3”的工资的仓库的所 在城市及其面积。 参考答案 注:2007年9月全国计算机等级考试二级(VFP)笔试 试卷第一大题选择题,第(33)小题:“查询选修 课程号为101的课程得分最高的同学”与此题类似。Visual FoxPro程序设计(等级考试版)附:嵌套查询与连接查询之间的转换有些嵌套查询可以转换为连接查询,但也有一些嵌套 查询不能被转换为连接查询。思考:什么样的嵌套查询可以被转换为连接查询?例:将“例4.5 查询哪些城市的仓库至少有一个职工工 资为1220元?”改用连接查询来做。Visual FoxPro程序设计(等级考试版)4.2.5 几个特殊运算符SQL SELECT有如下几个特殊运算符: BETWEENAND介于和之间,并且包括 两个边界值。 LIKE字符串匹配运算符通配符 “%” 表示0个或多个字符通配符 “_”(下划线)表示一个字符(可以是一个 ASCII码字符,也可以是一个汉字字符)。 != 在SQL中“不等于”用“!=”表示,另外还可以用 否定运算符 NOT 写出等价的命令。Visual FoxPro程序设计(等级考试版)4.2.5 几个特殊运算符例4.7 查询工资在12201270元之间的职工所有信息。SELECT * FROM zg WHERE 工资 BETWEEN 1220 AND 1270等价于SELECT * FROM zg WHERE 工资=1220 AND 工 资= 2001-7-1 AND 订购日期分组的记录集。l 可以按一列或多列分组,还可以用HAVING进一步 限定分组的条件。l GroupColumn可以是表的字段,也可以是一个数值 表达式。l HAVING子句总是跟在GROUP BY子句之后,而不 可以单独使用。注: 当使用 group by 时,查询列(即紧跟在select后 面的字段名或表达式)中除了在group by中出现的那( 些)个字段可以以字段名形式出现外,其他的列上要 用统计函数(sum,max,min,count 等),不然那句SQL 就是错的。Visual FoxPro程序设计(等级考试版)4.2.8 分组与计算查询例:求支付给每个仓库的职工的工资总额。SELECT 仓库号,SUM(工资) AS 工资总额 FROM zg; GROUP BY 仓库号查询结果:Visual FoxPro程序设计(等级考试版)4.2.8 分组与计算查询例:求各仓库的职工人数。SELECT 仓库号,COUNT(*) AS 职工人数 FROM zg; GROUP BY 仓库号或SELECT 仓库号,COUNT(职工号) AS 职工人数; FROM zg GROUP BY 仓库号说明:SQL的分组功能常常与计算函数结合使用。Visual FoxPro程序设计(等级考试版)4.2.8 分组与计算查询例:求各仓库工资高于1210元的职工的人数。SELECT 仓库号,COUNT(*) AS 职工人数 FROM zg; WHERE 工资1210; GROUP BY 仓库号查询结果:Visual FoxPro程序设计(等级考试版)4.2.8 分组与计算查询例:检索平均工资大于或等于1230元的仓库的仓库号。SELECT 仓库号 FROM zg; GROUP BY 仓库号 HAVING AVG(工资)=1230思考:如何检索平均工资大于或等于1230元的仓库的详 细信息?Visual FoxPro程序设计(等级考试版)4.2.8 分组与计算查询例:在dgd关系中检索2001年6月1日之后(含该天)签 订过两件以上(含两件)订单的职工的职工号。SELECT 职工号 FROM dgd;WHERE 订购日期2001-6-1; GROUP BY 职工号 HAVING COUNT(*)=2说明: HAVING子句和WHERE子句并不矛盾,它们可 以同时使用。在查询中总是先用WHERE子句限定元组 ,然后进行分组,最后再用HAVING子句对分组进行筛 选。Visual FoxPro程序设计(等级考试版)4.2.9 利用空值查询SQL支持空值(NULL),在SQL中可以利用空值进行 查询。l 空值可写成“NULL”或“null”,也可写成“.NULL.”
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号