Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章

上传人:E**** 文档编号:89181401 上传时间:2019-05-20 格式:PPT 页数:50 大小:314.50KB
返回 下载 相关 举报
Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章_第1页
第1页 / 共50页
Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章_第2页
第2页 / 共50页
Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章_第3页
第3页 / 共50页
Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章_第4页
第4页 / 共50页
Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章》由会员分享,可在线阅读,更多相关《Visual FoxPro 程序设计教程 教学课件 ppt 作者 刘瑞新 第14章(50页珍藏版)》请在金锄头文库上搜索。

1、第14章 关系数据库标准语言SQL,14.1 SQL简介 14.2 查询功能 14.3 操作功能 14.4 定义功能 14.5 在表单中使用SQL,14.1 SQL简介,SQL是Structured Query Language的缩写,即结构化查询语言。,14.2 查询功能,14.2.1 SQL语法 SELECT-SQL的语法格式如下: SELECT ALL | DISTINCT TOP 表达式 别名Select表达式AS 列名,别名Select表达式AS 列名 . FROM 数据库名! 表名AS Local_Alias INNER | LEFT OUTER | RIGHT OUTER | F

2、ULL OUTER JOIN 数据库名!表名AS Local_AliasON 联接条件 INTO 查询结果| TO FILE 文件名ADDITIVE | TO PRINTER PROMPT | TO SCREEN PREFERENCE PreferenceName NOCONSOLE PLAIN NOWAIT,WHERE 联接条件1AND 联接条件2.AND | OR 筛选条件. GROUP BY 组表达式,组表达式. HAVING 筛选条件 UNION ALL SELECT命令 ORDER BY 关键字表达式ASC | DESC ,关键字表达式ASC | DESC .,2. FROM子句 F

3、ROM子句用于指定查询的表与联接类型。其中: JOIN关键字用于联接其左右两个表名所指定的表。 INNER | LEFTOUTER | RIGHTOUTER | FULL OUTER选项指定两表联接时的联接类型,联接类型有4种,见表14-2。其中的OUTER选项表示外部联接,即允许满足联接条件的记录,又允许不满足联接条件的记录。若省略OUTER选项,效果不变。,3. WHERE子句 用来指定查询的条件。其中的联接条件指定一个字段,该字段连接FROM子句中的表。如果查询中包含不止一个表,就应该为第一个表后的每一个表指定连接条件。,4. 其他子句和选项,14.2.2 简单查询 简单查询只含有基本子

4、句,可有简单的查询条件。 【例14-1】下述代码可以查询学生表中的所有字段: SELECT * FROM xs 代码执行结果如图14-1所示。,【例14-2】下述代码可以从学生表中检索所有专业名称: SELECT zy FROM xs 代码执行结果如图14-2所示。,可以看到在结果中有重复值,如果要去掉重复值只需指定DISTINCT短语: SELECT DISTINCT zy FROM xs 【例14-3】下述代码可以检索成绩大于85分的学号: SELECT xh FROM cj WHERE cj 85 代码执行结果如图14-3所示。,【例14-4】下述代码可以查询哪些学生至少有一门课程成绩大

5、于85: 这里所要求检索的信息分别出自xs(姓名字段)和cj(成绩字段)两个表,这样的检索肯定是基于多个表的,此类查询一般用联接查询来实现。 SELECT DISTINCT xm FROM xs, cj WHERE cj 85 and xs.xh = cj.xh 代码执行结果如图14-4所示。,14.2.3 几个特殊运算符 在SQL语句中,WHERE子句后面的联接条件除了使用VFP语言中的关系表达式以及逻辑表达式外,还使用几个特殊运算符: NOT IN:表示不在之中。 NOT BETWEENAND:表示不在之间。 NOT LIKE:表示不与匹配。 下面以几个实例来说明。,【例14-5】在xs表

6、中检索所有国际贸易专业的学生信息,不要其他的学生信息。 这是一个字符串匹配的查询,LIKE运算符专门对字符型数据进行字符串比较。 SELECT * FROM xs WHERE zy LIKE “国际贸易“ 代码执行结果如图14-5所示。,【例14-6】在xs表中检索所有姓李的学生信息。 SELECT * FROM xs WHERE xm LIKE “李%“ 代码执行结果如图14-6所示。,【例14-7】在xs表中检索所有姓刘或姓张的学生信息。 这是一个字符串包含的查询,可以使用IN运算符: SELECT * FROM xs WHERE xm IN (“张“,“刘“) 代码执行结果如图14-7所

7、示。 说明: IN运算符,格式为IN(常量1,常量2,)。含义为查找和常量相等的值。 上式改为VFP条件为: SELECT * FROM xs WHERE xm = “张“ OR 姓名 = “刘“ 【例14-8】检索所有成绩在80和90之间的学生信息。 这个查询的条件是值在某一范围之间,可以使用BETWEEN运算符: SELECT DISTINCT xm FROM xs,cj ; WHERE (cj BETWEEN 80 AND 90) AND (xs.xh = cj.xh) 代码执行结果如图14-8所示。,14.2.4 嵌套查询 在前面的例子中,WHERE子句的联接条件是一个简单条件,有时,

8、联接条件本身涉及多个表,或由查询得到,这时就需要使用SQL的嵌套查询功能。,嵌套查询一般具有以下两种形式: 表达式 比较运算符 ANY | ALL | SOME(子查询) NOT EXISTS (子查询),例14-9】检索哪些专业至少有一个学生的成绩等于90分。 这个例子要求查询xs表中的专业信息,而查询条件是“cj”表的cj字段值,为此可以使用如下的嵌套查询: SELECT DISTINCT zy FROM xs WHERE xh IN ; (SELECT xh FROM cj WHERE cj = 90) 代码执行结果如图14-9所示。 【例14-10】找出与“李富强”专业相同的学生。 使

9、用如下的嵌套查询: SELECT * FROM xs WHERE zy = ; (SELECT zy FROM xs WHERE xm in (“李富强“) 代码执行结果如图14-10所示。,【例14-11】检索哪些学生的所有成绩都大于等于80分。 可以使用如下的嵌套查询: SELECT xm FROM xs WHERE xh NOT IN ; (SELECT xh FROM cj WHERE cj = 80) 代码执行结果如图14-11的左图所示。,图14-11 所有课程的成绩都大于80分的学生 说明:xs表中学生“张仙见”在cj表中没有相应的记录,但上述代码将该学生也检索出来,这显然是错误

10、的。可以要求排除那些没有成绩记录的学生,如图14-11的右图所示,代码改为: SELECT xm FROM xs WHERE xh NOT IN ; (SELECT xh FROM cj WHERE cj = 80) AND xh IN (SELECT xh FROM cj),【例14-12】在cj表中检索选修111101号课的学生中成绩比选修141203号课的最低成绩要高的学生的学号和成绩。 此查询可以先求出选修141203号课的所有学生成绩(结果是74,69,90,89),然后选出111101号课成绩中高于141203号课中某一个成绩的那些学生。要解决此题就要用到谓词ANY和SOME,语句

11、代码如下。代码执行结果如图14-12所示。,SELECT xh, cj FROM cj WHERE kch = “111101“ AND cj ANY ; (SELECT cj FROM cj WHERE kch= “141203“) 说明: 由于谓词ANY与SOME等价,所以与此命令等价的代码为: SELECT xh, cj FROM cj WHERE kch = “111101“ AND cj SOME ; (SELECT cj FROM cj WHERE kch= “141203“), 本例可以进一步改为在cj表中检索选修高等数学的学生中成绩比选修理论力学课的最低成绩要高的学生的学号和成

12、绩: SELECT xh, cj FROM cj, kc WHERE kcm= “高等数学“ and cj.kch = kc.kch ; AND cj ANY (SELECT cj FROM cj,kc ; WHERE kcm= “理论力学“ and cj.kch = kc.kch),【例14-13】求选修111101号课学生中成绩比选修141203号课的任何学生的成绩都要高的学生的学号和成绩。 此查询可以先找出选修141203号课的所有学生成绩,然后再求出111101号课成绩高于141203号课所有成绩的那些学生,即比141203号课最高成绩还要高的学生。 SELECT xh, cj FRO

13、M cj WHERE kch = “111101“ AND cj ALL ; (SELECT cj FROM cj WHERE kch= “141203“) 代码执行结果如图14-13所示。,14.2.5 分组、排序及系统函数的使用 1. 用于计算的系统函数 SQL不仅具有一般的检索数据的功能,而且还有计算检索的功能。SQL用于计算检索的系统函数有COUNT(计数)、SUM(求和)、AVG(求平均)、MAX(最大值)、MIN(最小值)。,【例14-14】下述代码计算出高等数学课程的平均成绩、最高成绩和最低成绩。 SELECT kcm, AVG(cj) AS “平均成绩“, MAX(cj) AS

14、 “最高成绩“, ; MIN(cj) AS “最低成绩“; FROM cj, kc WHERE kcm = “高等数学“ and cj.kch = kc.kch 代码执行结果如图14-14所示,【例14-15】下述代码计算出xs表中专业的数目。 SELECT COUNT(DISTINCT zy) FROM xs 代码执行结果如图14-15所示。 说明:计算专业数目应排除相同的项,因此使用DISTINCT选项。若无DISTINCT选项,将对记录个数进行计数: SELECT COUNT(*) FROM xs 【例14-16】下述代码找出高等数学成绩大于平均成绩的学号等信息。 SELECT * FR

15、OM cj WHERE kch = “111101“ AND cj ; (SELECT AVG(cj) FROM cj WHERE kch = “111101“) 代码执行结果如图14-16的左图所示。,说明:如图14-16的右图所示的查询结果来源于下述代码: SELECT xm, kcm, cj FROM xs,cj,kc ; WHERE xs.xh = cj.xh AND kc.kch = cj.kch ; AND kcm = “高等数学“ AND cj ; (SELECT AVG(cj) FROM cj, kc WHERE kc.kch = cj.kch AND kcm = “高等数学“

16、) 2. 排序 SQL中排序操作使用ORDER BY子句,其具体格式为: ORDER BY 关键字表达式1 ASC | DESC , 关键字表达式2 ASC | DESC . 其中,ASC为升序,DESC为降序。 【例14-17】下述代码在xs表中按出生日期字段升序(年龄降序)检索出全部学生信息:SELECT * FROM xs ORDER BY csrq 代码执行结果如图14-17所示,说明:如果要对出生日期进行降序排列,只要加上DESC: SELECT * FROM xs ORDER BY 出生日期 DESC 【例14-18】下述代码在cj表中,按学号升序、成绩降序排列检索出成绩信息: SELECT * FRO

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

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

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