铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第6章 SQL语言

第6章SQL语言6.1SQL概述SQL最早是在IBM公司研制的数据库管理系统SystemR上实现的。由于它接近于英语口语,具有功能丰富、使用灵活、语言简洁易学等优点,所以受到广泛的支持。经不断发展完善和扩充,SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后又被国际标准化组织(ISO)采纳为关系型数据库语言的国际标准。如今无论是OracleSybase、Informix、SQLServer等大型数据库管理系统,还是VisualFoxPro、PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。SQL语言具有如下主要特点:(1)SQL是一种一体化的语言。很多数据语言都包括数据定义、数据操作等语言,用来分别实现数据定义和数据操作等功能。而SQL包括数据定义、数据查询、数据操作和数据控制功能,是集各种功能于一体化语言,它可以完成数据库活动中的全部工作。(2)SQL语言是一种高度非过程化的语言,使用时只需要告诉计算机“做什么”,而不需要告诉计算机“怎么做”,即不需要叙述具体操作过程,SQL语言就可以将要求交给系统,由系统自动完成全部工作。(3)SQL语言使用方式灵活。它既可以直接以命令方式交互使用,也可以嵌入程序设计语言中以程序方式使用。现在很多数据库应用开发工具都将SQL语言直接融入到自身的语言之中,使用起来更方便,VisualFoxPro就是如此,这些使用方式为用户提供了灵活的选择余地。(4)SQL语言非常简洁。虽然SQL语言功能很强,但它只有为数不多的儿个命令动词下表给出了SQL语言使用的命令动词及其实现的功能。另外,SQL语句本身也非常接近英语的自然语言,因此容易学习和掌握。SQL功能命令动词数据查询SELECT定义表结构CREATE数据定义修改表结构ALTERDROP删除表插入记录INSERT修改记录UPDATE数据操作删除记录DELETE授予权限GRANT数据控制收回权限REVOKE由于VisualFoxPro自身在安全控制方面的缺陷,它没有提供数据控制功能,对SQL的支持主要体现在数据查询、数据定义和数据操作这三个方面。6.2查询功能SQL的核心是查询。SQL的查询命令也称为SELECT命令,它的基本形式由SELECT一FROM一WHERE查询块组成,多个查询块可以嵌套执行。VisualFoxPro的SQL查询语句的一般格式如下:SELECT[ALL|DISTINCT】《字段表达式1>[[AS】列标题1】;[[,《字段表达式2>][[AS]列标题2]];FROM[《表名或视图名>[,J]
第 6 章 SQL 语言 6.1 SQL 概述 SQL 最早是在 IBM 公司研制的数据库管理系统 System R 上实现的。由于它接近于英语 口语,具有功能丰富、使用灵活、语言简洁易学等优点,所以受到广泛的支持。经不断发展 完善和扩充,SQL 被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后又被国 际标准化组织(ISO)采纳为关系型数据库语言的国际标准。如今无论是 Oracle 、Sybase、 Informix、SQL Server 等大型数据库管理系统,还是 Visual FoxPro、PowerBuilder 这些 微机上常用的数据库开发系统,都支持 SQL 语言作为查询语言。 SQL 语言具有如下主要特点: (1)SQL 是一种一体化的语言。很多数据语言都包括数据定义、数据操作等语言,用 来分别实现数据定义和数据操作等功能。而 SQL 包括数据定义、数据查询、数据操作和数据 控制功能,是集各种功能于一体化语言,它可以完成数据库活动中的全部工作。 (2)SQL 语言是一种高度非过程化的语言,使用时只需要告诉计算机“做什么”,而不 需要告诉计算机“怎么做”,即不需要叙述具体操作过程,SQL 语言就可以将要求交给系统, 由系统自动完成全部工作。 (3)SQL 语言使用方式灵活。它既可以直接以命令方式交互使用,也可以嵌入程序设 计语言中以程序方式使用。现在很多数据库应用开发工具都将 SQL 语言直接融入到自身的语 言之中,使用起来更方便,Visual FoxPro 就是如此,这些使用方式为用户提供了灵活的选 择余地。 (4)SQL 语言非常简洁。虽然 SQL 语言功能很强,但它只有为数不多的几个命令动词, 下表给出了 SQL 语言使用的命令动词及其实现的功能。另外,SQL 语句本身也非常接近英语 的自然语言,因此容易学习和掌握。 SQL 功能 命令动词 数据查询 SELECT 数据定义 定义表结构 CREATE 修改表结构 ALTER 删除表 DROP 数据操作 插入记录 INSERT 修改记录 UPDATE 删除记录 DELETE 数据控制 授予权限 GRANT 收回权限 REVOKE 由于 Visual FoxPro 自身在安全控制方面的缺陷,它没有提供数据控制功能,对 SQL 的支持主要体现在数据查询、数据定义和数据操作这三个方面。 6.2 查询功能 SQL 的核心是查询。SQL 的查询命令也称为 SELECT 命令,它的基本形式由 SELECT-FROM -WHERE 查询块组成,多个查询块可以嵌套执行。Visual FoxPro 的 SQL 查询语句的一般格 式如下: SELECT [ALL|DISTINCT] [[AS] 列标题 1] ; [[,] [[AS] 列标题 2].]; FROM [,[,.]];

[WHERE《条件表达式>];[GROUPBY[HAVING[ASC|DESC]]从SELECT的命令格式来看似乎非常复杂,实际上只要理解了命令中各个短语的含义,SQLSELECT还是很容易掌握的,其中SELECT和FROM是必需的,WHERE、GROUPBY和ORDERBY是常用的,它们的含义如下:?SELECT:指出要查询的数据。ALL表示查询结果中可以包含重复记录,这是缺省值;DISTINCT则表示将查询结果中的重复记录删除。AS用于说明在查询结果中该列的标题。FROM:指出要查询的数据来源于哪个表或视图。-?WHERE:指出查询条件,只有满足查询条件的记录才会显示在查询结果中。GROUPBY:用于对查询结果进行分组。HAVING必须与GROUPBY一起使用,用于筛S选出满足一定条件的分组。.ORDERBY:用于对查询结果进行排序。ASC表示按字段表达式升序排列,这是缺省值:DESC表示按字段表达式降序排列。6.2.1简单查询1、投影查询所谓投影查询,是指选择表中的全部列或部分列。【例6-1】查询学生档案表信息。SELECT*FROMXSDA结果如下图所示。分析:查询某个表的信息,如果没有说明,则是指输出该表的所有属性列,可以有两种方法。一种方法是在SELECT后列出所有的字段名,也可以使用字符“*”。查询口回区学号姓名性别出生日期是否团员籍贯简历照片男00001李平IF江苏Memogen12/11/78湖南陈遥女12/24/8000002FMemo Gen00003李江苏女10/16/77FMemo gen浙江00004刘玲女F10/15/78MemoIgen男北京00005王国胜05/05/82ITmemogen00006王刚男安徽04/21/88ITmemo gen浙江00007宋海英女10/01/86MemoGenT2、选择查询所谓选择查询,是指选择表中满足指定条件的记录,可以通过WHERE子句实现。WHERE子句常用的查询条件如下表所示。查询条件谓词比较=,>,=, 《=, 1=, <>确定范围BETWEE AND, NOT BETWEEN AND确定集合IN, NOT IN字符匹配LIKE, NOT LIKE空值IS NULL,IS NOTNULI
[WHERE ]; [GROUP BY [HAVING ]]; [ORDER BY [ASC|DESC]] 从 SELECT 的命令格式来看似乎非常复杂,实际上只要理解了命令中各个短语的含义, SQL SELECT 还是很容易掌握的,其中 SELECT 和 FROM 是必需的,WHERE、GROUP BY 和 ORDER BY 是常用的,它们的含义如下: ⚫ SELECT:指出要查询的数据。ALL 表示查询结果中可以包含重复记录,这是缺省值; DISTINCT 则表示将查询结果中的重复记录删除。AS 用于说明在查询结果中该列的 标题。 ⚫ FROM:指出要查询的数据来源于哪个表或视图。 ⚫ WHERE:指出查询条件,只有满足查询条件的记录才会显示在查询结果中。 ⚫ GROUP BY:用于对查询结果进行分组。HAVING 必须与 GROUP BY 一起使用,用于筛 选出满足一定条件的分组。 ⚫ ORDER BY:用于对查询结果进行排序。ASC 表示按字段表达式升序排列,这是缺省 值;DESC 表示按字段表达式降序排列。 6.2.1 简单查询 1、投影查询 所谓投影查询,是指选择表中的全部列或部分列。 【例 6-1】查询学生档案表信息。 SELECT * FROM XSDA 结果如下图所示。 分析:查询某个表的信息,如果没有说明,则是指输出该表的所有属性列,可以有两种 方法。一种方法是在 SELECT 后列出所有的字段名,也可以使用字符“*”。 2、选择查询 所谓选择查询,是指选择表中满足指定条件的记录,可以通过 WHERE 子句实现。WHERE 子句常用的查询条件如下表所示。 查询条件 谓词 比较 =,>,=, 确定范围 BETWEE AND, NOT BETWEEN AND 确定集合 IN, NOT IN 字符匹配 LIKE, NOT LIKE 空值 IS NULL, IS NOT NULL

【例6-2】查询高等数学成绩在80以上的学生的学号和高等数学成绩。SELECT学号,高等数学FROMXSCJWHERE高等数学>=80或SELECT学号,高等数学FROMXSCJWHERENOT高等数学=70AND英语80)查询口D区学号英语0000277.0N0000674.0【例6-4】查询学生档案表中姓“王”的学生信息。SELECT*FROMXSDAWHERE姓名LIKE“王%”结果如下图所示。分析:谓词LIKE可以用来进行字符串的匹配,字符串可以包含通配符%和。其中,%代表任意多个字符,代表任意的单个字符。提示:与本例中的查询条件“姓名LIKE“王%””等价的表达式有:LEFT(姓名2)=”王”SUBSTR(姓名,1,2)=”王”查询口回区学号姓名性别出生日期是否团员籍贯简历照片00005王国胜男V05/05/82IT北京memo gen男00006王刚17安徽04/21/88memogen6.2.2排序在SQL查询命令中,可以用ORDERBY子句对查询结果按照一个或多个属性列的升序或降序进行排列,缺省值为升序。ORDERBY子句的格式如下:ORDERBY<排序字段名》[ASCDESC】[TOPN[PERCENT]]
【例 6-2】查询高等数学成绩在 80 以上的学生的学号和高等数学成绩。 SELECT 学号,高等数学 FROM XSCJ WHERE 高等数学>=80 或 SELECT 学号,高等数学 FROM XSCJ WHERE NOT 高等数学=70 AND 英语80) 【例 6-4】查询学生档案表中姓“王”的学生信息。 SELECT * FROM XSDA WHERE 姓名 LIKE “王%” 结果如下图所示。 分析:谓词 LIKE 可以用来进行字符串的匹配,字符串可以包含通配符%和_。其中,% 代表任意多个字符,_代表任意的单个字符。 提示:与本例中的查询条件“姓名 LIKE “王%”等价的表达式有: LEFT(姓名,2)=”王” SUBSTR(姓名,1,2)=”王” 6.2.2 排序 在 SQL 查询命令中,可以用 ORDER BY 子句对查询结果按照一个或多个属性列的升序或 降序进行排列,缺省值为升序。ORDER BY 子句的格式如下: ORDER BY [ASC|DESC] [TOP N [PERCENT]]

【例6-5】查询成绩表信息,要求记录按高等数学成绩降序排列。SELECT*FROMXSCJORDERBY高等数学DESC结果如下图所示。区查询学号高等数学 英语 计算机基础 马哲总分H0000396.087.095.095.00.095.00.00000185.086.092.00000570.069.076.085.00.00000762.046.067.075.00.00000660.074.071.085.00.00000441.054.064.085.00.00000230.077.067.085.00.0【例6-6】查询成绩表信息,要求按马哲成绩降序,马哲成绩相同时按高等数学成绩升序排列。SELECT*FROMXSCJORDERBY马哲DESC高等数学结果如下图所示。分析:SQL查询命令中的排序与VisualFoxPro中的SORT排序命令一样,都支持多个排序字段,并可以分别对各个排序字段进行升序或降序控制。口回区查询学号高等数学英语计算机基础马哲总分V0000185.086.092.095.00.00000396.087.095.095.00.00000230.077.067.085.00.00000441.054.064.085.00.071.00000660.074.085.00.00000570.069.076.085.00.00000762.046.067.075.00.016.2.3简单的计算查询SQL不仅具有一般的检索能力,而且还有计算方式的检索,如检索学生的平均成绩、检索学生的最高分等。可用于计算检索的函数有:①COUNT一计数②SUM一求和③AVG一计算平均值①MAX一求最大值MIN一求最小值【例6-7】统计学生档案表中学生的总人数和籍贯数。SELECTCOUNT(*)AS总人数,COUNT(DISTINCT籍贯)AS籍贯数;FROM XSDA结果如下图所示。分析:在学生档案表中,学生总人数就是记录数,统计全表的记录总数用COUNT(*)。在统计籍贯时,为了去除重复的籍贯,要使用DISTINCT短语。同时要输出有意义的列名
【例 6-5】查询成绩表信息,要求记录按高等数学成绩降序排列。 SELECT * FROM XSCJ ORDER BY 高等数学 DESC 结果如下图所示。 【例 6-6】查询成绩表信息,要求按马哲成绩降序,马哲成绩相同时按高等数学成绩升 序排列。 SELECT * FROM XSCJ ORDER BY 马哲 DESC,高等数学 结果如下图所示。 分析:SQL 查询命令中的排序与 Visual FoxPro 中的 SORT 排序命令一样,都支持多个 排序字段,并可以分别对各个排序字段进行升序或降序控制。 6.2.3 简单的计算查询 SQL 不仅具有一般的检索能力,而且还有计算方式的检索,如检索学生的平均成绩、检 索学生的最高分等。可用于计算检索的函数有: ①COUNT—计数 ②SUM—求和 ③AVG—计算平均值 ④MAX—求最大值 ⑤MIN—求最小值 【例 6-7】统计学生档案表中学生的总人数和籍贯数。 SELECT COUNT(*) AS 总人数,COUNT(DISTINCT 籍贯) AS 籍贯数; FROM XSDA 结果如下图所示。 分析:在学生档案表中,学生总人数就是记录数,统计全表的记录总数用 COUNT(*)。 在统计籍贯时,为了去除重复的籍贯,要使用 DISTINCT 短语。同时要输出有意义的列名

还需要使用AS短语。口回查询总人数籍贯数75A【例6-8】求成绩表中学生的平均英语成绩。SELECT_AVG(英语)FROMXSCJ结果如下图所示。口回区照查询AV_英语F70.43一【例6-9】求计算机基础的最高成绩和最低成绩。SELECTMAX(计算机基础),MIN(计算机基础)FROMXSCJ结果如下图所示。雕查询口回区Max_计算机基础Min_计算机基础口95.064.0十区6.2.4分组与计算查询在SQL查询命令中,常用GROUPBY子句对查询结果进行分组,可实现数据的分类汇总功能。GROUPBY子句的格式如下:GROUPBY[HAVING]【例6-10】求各城市学生的平均年龄。SELECT籍贯,AVG(YEAR(DATE())-YEAR(出生日期))AS平均年龄:FROMXSDAGROUPBY籍贯结果如下图所示。00×咖查询籍贯平均年龄V安徽21.00北京27.00湖南29.00江苏31.50浙江27.00【例6-11】查询平均年龄在28岁以下(包括28岁)的各城市学生的平均年龄。SELECT籍贯,AVG(YEAR(DATE())-YEAR(出生日期))AS平均年龄:FROMXSDAGROUPBY籍贯HAVING平均年龄<=28
还需要使用 AS 短语。 【例 6-8】求成绩表中学生的平均英语成绩。 SELECT AVG(英语) FROM XSCJ 结果如下图所示。 【例 6-9】求计算机基础的最高成绩和最低成绩。 SELECT MAX(计算机基础),MIN(计算机基础) FROM XSCJ 结果如下图所示。 6.2.4 分组与计算查询 在 SQL 查询命令中,常用 GROUP BY 子句对查询结果进行分组,可实现数据的分类汇总 功能。GROUP BY 子句的格式如下: GROUP BY [HAVING ] 【例 6-10】求各城市学生的平均年龄。 SELECT 籍贯,AVG(YEAR(DATE())-YEAR(出生日期)) AS 平均年龄; FROM XSDA GROUP BY 籍贯 结果如下图所示。 【例 6-11】查询平均年龄在 28 岁以下(包括 28 岁)的各城市学生的平均年龄。 SELECT 籍贯,AVG(YEAR(DATE())-YEAR(出生日期)) AS 平均年龄; FROM XSDA GROUP BY 籍贯 HAVING 平均年龄<=28

结果如下图所示。提示:可以用HAVING短语来限定分组的输出,只有满足限定条件的分组才会出现在查询结果中。HAVING短语必须配合GROUPBY子句一起使用。查询口0×籍贯平均年龄安徽21.00北京27.00浙江27.006.3.5简单的连接查询前面的查询都是针对单个表进行的。连接查询是表的基本操作之一,连接查询是一种基于两个或两个以上的表的查询。连接查询与后面将要介绍的嵌套查询的区别在于:连接查询的查询结果一般来自于多个表中的数据,而嵌套查询的查询结果只来源于一个表中的数据。【例6-12】查询男同学的姓名和英语成绩。SELECT姓名,英语FROMXSDA,XSCJ;WHERE性别="男”ANDXSDA.学号=XSCJ.学号结果如下图所示。提示1:连接查询一般都需要多表间的连接条件,本例中的连接条件是“XSDA.学号=XSCJ学号”。提示2:当FROM之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指明属性所属的关系,如“XSDA.学号”。嘟查询口回区姓名英语李平86.0V王国胜69.0王刚74.06.3.6超连接查询在新的SQL标准中还支持两个超连接运算符:“*=”和“=*”,它们与我们原先所了解的连接不同。原来的连接是只有满足连接条件,相应的结果才会出现在查询结果中;在这两个新的连接运算是:首先保证一个表中满足条件的元组都在查询结果中,然后将满足连接条件的元组与另一个表的元组进行连接,不满足连接条件的则将应来自另一个表的属性值设置为空值。在SQL中,“*=”称为左连接,含义是在查询结果中包含第一个表中满足条件的所有记录:如果有在连接条件上匹配的元组,则第二个表返回相应值,否则第二个表返回空值。“=*称为右连接,含义是在查询结果中包含第二个表中满足条件的所有记录:如果有在连接条件上匹配的元组,则第一个表返回相应值,否则第一个表返回空值。VisualFoxPro不支持超连接运算符“*=”和“=*”,VisualFoxPro有专门的连接运算语法格式,它支持超连接查询,与连接运算有关的语法格式如下:SELECT
结果如下图所示。 提示:可以用 HAVING 短语来限定分组的输出,只有满足限定条件的分组才会出现在查 询结果中。HAVING 短语必须配合 GROUP BY 子句一起使用。 6.3.5 简单的连接查询 前面的查询都是针对单个表进行的。连接查询是表的基本操作之一,连接查询是一种基 于两个或两个以上的表的查询。连接查询与后面将要介绍的嵌套查询的区别在于:连接查询 的查询结果一般来自于多个表中的数据,而嵌套查询的查询结果只来源于一个表中的数据。 【例 6-12】查询男同学的姓名和英语成绩。 SELECT 姓名,英语 FROM XSDA,XSCJ; WHERE 性别="男" AND XSDA.学号=XSCJ.学号 结果如下图所示。 提示 1:连接查询一般都需要多表间的连接条件,本例中的连接条件是“XSDA.学号=XSCJ. 学号”。 提示 2:当 FROM 之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指 明属性所属的关系,如“XSDA.学号”。 6.3.6 超连接查询 在新的 SQL 标准中还支持两个超连接运算符:“*=”和“=*”,它们与我们原先所了解的 连接不同。原来的连接是只有满足连接条件,相应的结果才会出现在查询结果中;在这两个 新的连接运算是:首先保证一个表中满足条件的元组都在查询结果中,然后将满足连接条件 的元组与另一个表的元组进行连接,不满足连接条件的则将应来自另一个表的属性值设置为 空值。 在 SQL 中,“*=”称为左连接,含义是在查询结果中包含第一个表中满足条件的所有记 录;如果有在连接条件上匹配的元组,则第二个表返回相应值,否则第二个表返回空值。“=*” 称为右连接,含义是在查询结果中包含第二个表中满足条件的所有记录;如果有在连接条件 上匹配的元组,则第一个表返回相应值,否则第一个表返回空值。 Visual FoxPro 不支持超连接运算符“*=”和“=*”,Visual FoxPro 有专门的连接运算 语法格式,它支持超连接查询,与连接运算有关的语法格式如下: SELECT

FROM《表1>INNER|LEFT|RIGHT|FULLJOINONWHERE....其中:INNERJOIN等价于JOIN,为普通的连接,在VISUALFOXPRO中称为内部连接。LEFTJOIN为左连接。RIGHTJOIN为右连接。FULLJOIN为完全连接,即两个表中的记录不管是否满足连接条件,都出现在查询结果中,不满足连接条件的记录对应部分为NULL。为了更好的理解内部连接、左连接、右连接和完全连接的概念,将成绩表中的学号“00001”暂时修改为“00008”。在此基础上,进行下面的实例操作,比较各连接运算的区别。【例6-13】内部连接,查询男同学的姓名和英语成绩。SELECT姓名,英语FROMXSDAINNERJOINXSCJ;ONXSDA.学号=XSCJ.学号WHERE性别="男”结果如下图所示。提示:内部连接查询也可以用简单的连接查询来实现,二者的查询结果完全相同,即本例中的命令等价于:SELECT姓名,英语FROMXSDA,XSCJ;WHERE性别=”男”ANDXSDA.学号=XSCJ.学号查询口回区姓名英语王国胜69.0C74.0王刚【例6-14】左连接,查询全体同学的姓名和英语成绩。SELECT姓名,英语FROMXSDALEFTJOINXSCJONXSDA.学号=XSCJ.学号结果如下图所示。查询口回×姓名英语M李平HULL陈遥77.0李彤87.0刘玲54.0王国胜69.0王刚74.0宋海英46.06.3.7嵌套查询在SQL语言中,一个SELECT一FROM一WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。VisualFoxPro只支持两层查询,即内层查询块(子查询)和外层查询块(父查询),而不支持SQL的多层
FROM INNER|LEFT|RIGHT|FULL JOIN ON WHERE . 其中: INNER JOIN 等价于 JOIN,为普通的连接,在 VISUAL FOXPRO 中称为内部连接。 LEFT JOIN 为左连接。 RIGHT JOIN 为右连接。 FULL JOIN 为完全连接,即两个表中的记录不管是否满足连接条件,都出现在查询结果 中,不满足连接条件的记录对应部分为 NULL。 为了更好的理解内部连接、左连接、右连接和完全连接的概念,将成绩表中的学号 “00001”暂时修改为“00008”。在此基础上,进行下面的实例操作,比较各连接运算的区 别。 【例 6-13】内部连接,查询男同学的姓名和英语成绩。 SELECT 姓名,英语 FROM XSDA INNER JOIN XSCJ; ON XSDA.学号=XSCJ.学号 WHERE 性别="男" 结果如下图所示。 提示:内部连接查询也可以用简单的连接查询来实现,二者的查询结果完全相同,即本 例中的命令等价于: SELECT 姓名,英语 FROM XSDA,XSCJ; WHERE 性别="男" AND XSDA.学号=XSCJ.学号 【例 6-14】左连接,查询全体同学的姓名和英语成绩。 SELECT 姓名,英语 FROM XSDA LEFT JOIN XSCJ ON XSDA.学号=XSCJ.学号 结果如下图所示。 6.3.7 嵌套查询 在 SQL 语言中,一个 SELECT-FROM-WHERE 语句称为一个查询块。将一个查询块嵌套在 另一个查询块的 where 子句或 having 短语的条件中的查询称为嵌套查询。Visual FoxPro 只支持两层查询,即内层查询块(子查询)和外层查询块(父查询),而不支持 SQL 的多层

嵌套查询。嵌套查询一般的求解方法是由里向外处理。即子查询总是在上一级查询处理之前求解,子查询的结果用于父查询的查找条件。1、使用IN实现嵌套查询在嵌套查询中,子查询的结果往往是一个集合,所以IN是嵌套查询中最经常使用的谓词。【例6-15】查询江苏籍学生的英语成绩。SELECT英语FROMXSCJWHERE学号IN;(SELECT学号FROMXSDAWHERE籍贯="江苏")结果如下图所示。提示:若要查询非江苏籍的学生英语成绩,只需将本例命令中的IN改为NOTIN即可。查询口×英语中86.087.02、使用EXISTS实现嵌套查询带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“TURE”或逻辑假值“FALSE"。【例6-16】查询团员学生的高等数学成绩。SELECT高等数学FROMXSCJWHEREEXISTS:(SELECT*FROMXSDAWHERE是否团员=.T.ANDXSDA.学号=XSCJ.学号)它等价于:SELECT高等数学FROMXSCJWHERE学号IN:(SELECT学号FROMXSDAWHERE是否团员=.T.)结果如下图所示。提示:若要查询非团员学生的高等数学成绩,只需将本例命令中的EXISTS改为NOTEXISTS即可。查询回高等数学H70.060.062.03、使用ANY、ALL和SOME实现嵌套查询运算符ANY、ALL和SOME是量词,其中ANY和sOme是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所有行都使结果为真时,结果才为真。【例6-17】查询女同学中年龄(比较到日)比某一男同学大的学生信息。SELECT*FROMXSDAWHERE性别=”女”AND出生日期<ANY;(SELECT出生日期FROMXSDAWHERE性别="男)
嵌套查询。 嵌套查询一般的求解方法是由里向外处理。即子查询总是在上一级查询处理之前求解, 子查询的结果用于父查询的查找条件。 1、使用 IN 实现嵌套查询 在嵌套查询中,子查询的结果往往是一个集合,所以 IN 是嵌套查询中最经常使用的谓 词。 【例 6-15】 查询江苏籍学生的英语成绩。 SELECT 英语 FROM XSCJ WHERE 学号 IN; (SELECT 学号 FROM XSDA WHERE 籍贯="江苏") 结果如下图所示。 提示:若要查询非江苏籍的学生英语成绩,只需将本例命令中的 IN 改为 NOT IN 即可。 2、使用 EXISTS 实现嵌套查询 带有 EXISTS 谓词的子查询不返回任何数据,只产生逻辑真值“TURE”或逻辑假值 “FALSE”。 【例 6-16】查询团员学生的高等数学成绩。 SELECT 高等数学 FROM XSCJ WHERE EXISTS; (SELECT * FROM XSDA WHERE 是否团员=.T. AND XSDA.学号=XSCJ.学号) 它等价于: SELECT 高等数学 FROM XSCJ WHERE 学号 IN; (SELECT 学号 FROM XSDA WHERE 是否团员=.T.) 结果如下图所示。 提示:若要查询非团员学生的高等数学成绩,只需将本例命令中的 EXISTS 改为 NOT EXISTS 即可。 3、使用 ANY、ALL 和 SOME 实现嵌套查询 运算符 ANY、ALL 和 SOME 是量词,其中 ANY 和 some 是同义词,在进行比较运算时只要 子查询中有一行能使结果为真,则结果就为真;而 ALL 则要求子查询中的所有行都使结果为 真时,结果才为真。 【例 6-17】 查询女同学中年龄(比较到日)比某一男同学大的学生信息。 SELECT * FROM XSDA WHERE 性别="女" AND 出生日期<ANY; (SELECT 出生日期 FROM XSDA WHERE 性别="男")

它等价于:SELECT*FROMXSDAWHERE性别=”女”AND出生日期,可以将查询结果输出到指定的表中(.DBF文件)。【例6-19】查询男同学的姓名和籍贯,要求查询结果保存到表ABC.DBF中。SELECT姓名,籍贯FROMXSDAWHERE性别=”男”INTOTABLEABC2、将查询结果输出到临时表在查询语句中添加短语INTOCURSOR,可以将查询结果输出到一个临时的表文件中。该临时文件是一个只读的.DBF文件,当查询刚完成时自动成为当前文件,可以像一般的表文件一样使用。当关闭文件时,该文件会自动删除
它等价于: SELECT * FROM XSDA WHERE 性别="女" AND 出生日期,可以将查询结果输出到指定的表中 (.DBF 文件)。 【例 6-19】查询男同学的姓名和籍贯,要求查询结果保存到表 ABC.DBF 中。 SELECT 姓名,籍贯 FROM XSDA WHERE 性别=”男” INTO TABLE ABC 2、将查询结果输出到临时表 在查询语句中添加短语 INTO CURSOR ,可以将查询结果输出到一个临时的 表文件中。该临时文件是一个只读的.DBF 文件,当查询刚完成时自动成为当前文件,可以 像一般的表文件一样使用。当关闭文件时,该文件会自动删除

3、将查询结果输出到数组在查询语句中添加短语INTOARRAY,可以将查询结果输出到指定的数组中。4、将查询结果输出到文本文件在查询语句中添加短语TOFILE,可以将查询结果输出到指定的文本文件中(.TXT文件)。如果使用了ADDITIVE,查询结果会追回在原文件的尾部,否则将覆盖原有文件。5、将查询结果输出到打印机在查询语句中添加短语TOPRINTER[PROMPT],可以将查询结果输出到打印机,即打印查询结果。若使用了PROMPT选择项,则在开始打印之前会打开打印机设置对话框。6.3操作功能6.3.1插入记录在SQL中,INSERT命令向表中插入记录有以下两种格式。格式1:INSERTINTO;[(,《字段名2>,…")]VALUES(,,")格式2:INSERTINTO=L,=.:[WHERE]该命令可以修改指定表中满足WHERE子句条件的记录的字段值,并且可以一次更新多个字段。如果省略where子句,则表示修改表中的全部记录。(例6-21】计算成绩表中学号为00003的学生的总分。UPDATEXSCJSET总分=高等数学+英语+计算机基础+马哲;WHERE学号=”00003”提示:本例也可以用VFP中的命令实现。命令为:REPLACE总分WITH高等数学+英语+计算机基础+马哲FOR学号=”00003”6.3.3删除记录SQL的删除记录格式如下:DELETEFROM<表名》[WHERE<删除条件》该命令可以在指定表中逻辑删除所有满足WHERE子句条件的记录。如果省略WHERE子句则表示逻辑删除表中的全部记录。【例6-22】删除学生档案表中不是团员的学生记录。DELETEFROMXSDAWHERE是否团员=.F提示:“是否团员”是逻辑型字段,因此本例中的条件表达式等价于“NOT是否团员
3、将查询结果输出到数组 在查询语句中添加短语 INTO ARRAY ,可以将查询结果输出到指定的数组中。 4、将查询结果输出到文本文件 在查询语句中添加短语 TO FILE ,可以将查询结果输出到指定的文本文 件中(.TXT 文件)。如果使用了 ADDITIVE,查询结果会追回在原文件的尾部,否则将覆盖原 有文件。 5、将查询结果输出到打印机 在查询语句中添加短语 TO PRINTER[PROMPT],可以将查询结果输出到打印机,即打印 查询结果。若使用了 PROMPT 选择项,则在开始打印之前会打开打印机设置对话框。 6.3 操作功能 6.3.1 插入记录 在 SQL 中,INSERT 命令向表中插入记录有以下两种格式。 格式 1:INSERT INTO ; [(,,.)] VALUES (,,.) 格式 2:INSERT INTO FROM ARRAY 【例 6-20】在成绩表中插入一条记录,如下表所示。 INSERT INTO XSCJ VALUES(“00008”,75,80,91,78,0) 提示:在查询命令中的数据要加上定界符。 学号 高等数学 英语 计算机基础 马哲 总分 00008 75 80 91 78 0 6.3.2 数据更新 SQL 的数据更新命令格式如下: UPDATE ; SET =[,=.]; [WHERE ] 该命令可以修改指定表中满足 WHERE 子句条件的记录的字段值,并且可以一次更新多个 字段。如果省略 where 子句,则表示修改表中的全部记录。 【例 6-21】计算成绩表中学号为 00003 的学生的总分。 UPDATE XSCJ SET 总分=高等数学+英语+计算机基础+马哲; WHERE 学号=”00003” 提示:本例也可以用 VFP 中的命令实现。命令为: REPLACE 总分 WITH 高等数学+英语+计算机基础+马哲 FOR 学号=”00003” 6.3.3 删除记录 SQL 的删除记录格式如下: DELETE FROM [WHERE ] 该命令可以在指定表中逻辑删除所有满足WHERE子句条件的记录。如果省略WHERE子句, 则表示逻辑删除表中的全部记录。 【例 6-22】删除学生档案表中不是团员的学生记录。 DELETE FROM XSDA WHERE 是否团员=.F. 提示:“是否团员”是逻辑型字段,因此本例中的条件表达式等价于“NOT 是否团员
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第5章 表单.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第4章 结构化程序设计.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第3章 数据库及其操作.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第2章 数据与数据运算.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第1章 数据库基础知识.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第10章 综合应用系统的开发.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第8章 菜单.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第5章 表单.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第9章 报表和标签.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第7章 查询与视图.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第6章 SQL语言.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第4章 结构化程序设计.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第3章 数据库及其操作.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第2章 数据与数据运算.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第1章 数据库基础知识.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(PPT课件)第10章 综合应用系统的开发.ppt
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程综合性实验项目教学大纲.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》实验课程教学大纲.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学大纲 Principles of database and application.doc
- 铜陵学院数学与计算机学院:《微积分》理论课程教学大纲 Infinitesimal Calculus.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第7章 查询与视图.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第8章 菜单.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(教案讲义)第9章 报表和标签.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)VFP程序设计复习题集及答案.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)2009年3月全国计算机等级考试二级VFP笔试真题及答案.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)2009年9月全国计算机等级考试二级VF笔试真题及答案.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)2010年3月全国计算机等级考试二级真题-VFP.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)2010年9月全国计算等级考试二级VFP笔试试题及答案.doc
- 铜陵学院数学与计算机学院:《数据库原理及应用》课程教学资源(试卷习题)2011年3月全国计算机等级考试二级VFP笔试试题.doc
- 长春大学:《高等数学》课程教学资源(授课教案)微积分教案(任课教师:王羽).doc
- 长春大学:《高等数学》课程教学资源(授课教案)微积分教案(任课教师:肖桂荣).doc
- 长春大学:《高等数学》课程教学资源(授课教案)概率论与数理统计教案(任课教师:朱天晓).doc
- 长春大学:《高等数学》课程教学资源(授课教案)概率论与数理统计教案(任课教师:许莹).doc
- 长春大学:《高等数学》课程教学资源(授课教案)线性代数教案(任课教师:朱天晓).doc
- 长春大学:《高等数学》课程教学资源(授课教案)线性代数教案(任课教师:许莹).doc
- 长春大学:《高等数学》课程教学大纲.doc
- 长春大学:《高等数学》课程作业习题(概率论与数理统计)第一章 随机事件及其概率总习题、自测题及其详解.docx
- 长春大学:《高等数学》课程作业习题(概率论与数理统计)第二章 随机变量及其分布总习题、自测题及其详解.docx
- 长春大学:《高等数学》课程作业习题(概率论与数理统计)第四章 随机变量的数字特征与极限定理总习题与详解.docx
- 长春大学:《高等数学》课程作业习题(微积分)第一章 函数与极限总习题、自测题及其详解.doc
