关系型数据库标准语言SQL.ppt
《关系型数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《关系型数据库标准语言SQL.ppt(114页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)第第4章章 关系型数据库标准语言关系型数据库标准语言SQLVisual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)内容提要内容提要4.1 SQL概述4.2 查询功能4.3 操作功能4.4 定义功能4.5 典型例题解析4.6 小型案例实训4.7 本章小结4.8 习题Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.1 SQL概述SQLStructured Query Language(结构化查询语言)的缩写 SQ
2、L目前已成为关系数据库的标准语言。现在所有的关系型数据库管理系统都支持SQL,VFP也不例外。SQL包含了数据定义、数据操纵和数据控制功能。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)SQL的主要特点l SQL是一种一体化的语言,它包含数据定义、数据查询、数据操纵和数据控制等方面的功能,可以完成数据库活动中的全部工作。l SQL是一种高度非过程化的语言l SQL非常简洁l SQL可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)
3、表4-1 SQL命令动词SQL功能命令动词数据查询 SELECT 数据定义 CREATE、DROP、ALTER 数据操纵 INSERT、UPDATE、DELETE数据控制 GRANT、REVOKE u SQL命令动词Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2 查 询 功 能 查询是SQL的核心 SQL的查询命令SELECT SQL-SELECT命令可以从一个表或多个表或视图中检索数据Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.1 创建SELECT命令 l SELECT命令详解
4、:(略)Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.1 创建SELECT命令 可以在以下3个区域中创建SELECT命令:在命令窗口中在VFP程序中在查询设计器中Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.2 简单查询简单查询是针对单个表的查询 查询仅涉及一个表,是一种最简单的查询。无条件查由SELECT和FROM短语构成无条件查询 SELECT select_Item FROM TableName 条件查询由SELECT、FROM和WHERE短语构成条件查询SELECT se
5、lect_Item FROM TableName WHERE FilterCondition指定查指定查询条件询条件Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.2 简单查询例例4.1 从zg关系中检索所有职工的工资值。SELECT 工资 FROM zg结果显示如图4-2所示:图4-2 检索所有的工资值 Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)例:例:检索zg关系的所有元组。SELECT 仓库号,职工号,工资 FROM zg或SELECT *FROM zg查询结果:查询结果:Vis
6、ual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)例例4.2 从zg关系中检索工资多于1220元的职工号。SELECT 职工号 FROM zg WHERE 工资1220结果显示如图4-3所示:图4-3 检索工资结果Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)例例4.3 检索在仓库WH2或WH1工作,并且工资少于1250元的职工的职工号。SELECT 职工号 FROM zg WHERE(仓库号=“WH2”OR 仓库号=“WH1”)AND 工资1210结果显示如下图所示:上面结果中上面结果中“WH2”出现了
7、两次,显然是重复的,我们出现了两次,显然是重复的,我们并不希望看到这种情况的发生,为此我们可以使用并不希望看到这种情况的发生,为此我们可以使用DISTINCT短语来消除查询中的重复结果(重复行)。短语来消除查询中的重复结果(重复行)。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)加入 DISTINCT 后的SELECT命令如下:SELECT DISTINCT 仓库号 FROM zg WHERE工资1210结果显示如下图所示:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.3 简单的连接查询
8、 简单的连接查询是一类基于多个表的查询 一个数据库中的多个表之间一般都存在某种内在联系,它们共同提供有用的信息。如果一个查询同时涉及两个以上的表,则称为连接查询。其基本格式是:SELECT select_Item1,select_Item2 FROM TableName1,TableName2 WHERE JoinCondition注:当FROM之后的多个关系中含有相同的属性名时,引用该属性名必须用关系前缀指明属性所属的关系,即TableName.属性名属性名,“.”前面的是关系名,后面是属性名。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4
9、.2.3 简单的连接查询例例4.4 找出工作在面积大于340的仓库的职工的职工号和职工所在的城市。SELECT 职工号,城市 FROM ck,zg;WHERE ck.仓库号=zg.仓库号 AND 面积340 结果显示如下图所示:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询嵌套查询在SQL中,可以将一个select查询语句嵌入到另一个select查询语句中,这称为嵌套查询。l 将内嵌的select语句称为子查询。l 标准的SQL允许子查询可以嵌套多层,但在VFP中,不允许多层嵌套,即子查询不能再嵌套了。l 一般来说,当查询所
10、要求的结果出自一个关系,但查询条件却涉及多个关系时。例如,当检索关系X中的元组时,它的条件依赖于相关的关系Y中的元组的属性值,这时使用SQL的嵌套查询功能将非常方便。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询嵌套查询的一般格式为:SELECT select_Item1 FROM TableName1 WHERE FilterCondition1 IN;(SELECT select_Item2 FROM TableName2 WHERE FilterCondition2)注:内嵌的子查询要用圆括号括起来。Visual Fo
11、xProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询例4.5 查询哪些城市的仓库至少有一个职工工资为1220元?嵌套查询:SELECT 城市 FROM ck WHERE 仓库号 IN;(SELECT 仓库号 FROM zg WHERE 工资=1220)结果显示如下图所示:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询例4.6 查询和职工E4工资相同的所有职工的记录嵌套查询:SELECT *FROM zg WHERE 工资;(SELECT 工资 FROM zg WHERE 职工号=
12、“E4”)结果显示如下图所示:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询例:查询具有最高工资的职工的信息。嵌套查询:SELECT *FROM zg WHERE 工资;(SELECT MAX(工资)FROM zg)结果显示如下图所示:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.4 嵌套查询思考:查询有职工的工资高于“E3”的工资的仓库的所在城市及其面积。参考答案参考答案注:2007年9月全国计算机等级考试二级(VFP)笔试试卷第一大题选择题,第(33)小题:“查询
13、选修课程号为101的课程得分最高的同学”与此题类似。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)附:嵌套查询与连接查询之间的转换有些嵌套查询可以转换为连接查询,但也有一些嵌套查询不能被转换为连接查询。思考:什么样的嵌套查询可以被转换为连接查询?例:例:将“例4.5 查询哪些城市的仓库至少有一个职工工资为1220元?”改用连接查询来做。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符SQL SELECT有如下几个特殊运算符:BETWEENAND介于和之间,并且包括两个边界
14、值。LIKE字符串匹配运算符 通配符“%”表示0个或多个字符 通配符“_”(下划线)表示一个字符(可以是一个ASCII码字符,也可以是一个汉字字符)。!=在SQL中“不等于”用“!=”表示,另外还可以用否定运算符 NOT 写出等价的命令。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符例例4.7 查询工资在12201270元之间的职工所有信息。SELECT *FROM zg WHERE 工资 BETWEEN 1220 AND 1270等价于SELECT *FROM zg WHERE 工资=1220 AND 工资=2001
15、-7-1 AND 订购日期=2001-7-31Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符例例4.8 从gys关系中查询出全部公司的信息,不要工厂和其他供应商的信息。SELECT *FROM gys WHERE 订货商名 like “%公司”查询结果:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符例例:从学生关系中检索出所有王姓学生的信息。SELECT *FROM 学生 WHERE 姓名 like “王%”查询结果:Visual FoxPro
16、Visual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符例例:从学生关系中检索出所有女生的信息。SELECT *FROM 学生 WHERE 性别=“女”或SELECT *FROM 学生 WHERE 性别 like “女”查询结果:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.5 几个特殊运算符思考:思考:SELECT *FROM 学生 WHERE 姓名 not like “王%”的结果是什么?SELECT *FROM 学生 WHERE not 姓名 like “王%”的结果又是什么?它与上面的SE
17、LECT查询命令是相同的吗?Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.6 排序 SQL SELECT命令可以对查询结果进行排序,实现排序的短语是ORDER 了BY,具体格式如下:ORDER BY Order_Item ASC|DESC,Order_Item ASC|DESCu ORDER BY短语中的每个Order_Item都必须对应查询结果中的一列。u 排序的顺序可以是升序(ASC)或降序(DESC)u 可以按一列或多列排序,当指定多列排序时,各列列名之间用“,”分隔。Visual FoxProVisual FoxPro程序设计(
18、等级考试版)程序设计(等级考试版)4.2.6 排序例例4.9 查找出zg表中所有职工的信息并将结果按工资升序排序。SELECT *FROM zg ORDER BY 工资或SELECT *FROM zg ORDER BY 工资 ASC查询结果:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.6 排序例:例:检索所有的学生的信息,结果按年龄降序排序,年龄相同的,按学号升序排序。SELECT *FROM 学生 ORDER BY 年龄 DESC,学号或SELECT *FROM 学生 ORDER BY 年龄 DESC,学号 ASC查询结果:Visu
19、al FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询 SQL不仅可以查询表中的数据,而且还可以对表中的数据进行计算。例如,从zg表中检索职工的平均工资,检索某个仓库中职工的最高工资,统计某仓库的职工人数等等。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询SQL用于计算查询的函数:COUNT计数函数用法:(1)COUNT(column_name)返回给定表中指定列的值的个数(NULL值不计入)(2)COUNT(*)返回指定表中匹配指定条件的行的数目注:COUN
20、T 和 DISTINCT 经常被合起来使用Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询例例4.10 查询gys表中供应商所在地的数目。SELECT COUNT(DISTINCT 地址)FROM gys或SELECT COUNT(DISTINCT 地址)AS 供应商所在地个数 FROM gys!注意:上面COUNT函数中“地址”前面的DISTINCT不可少,否则结果是错误的,即SELECT COUNT(地址)FROM gys得到的结果不是供应商所在地的个数。Visual FoxProVisual FoxPro程序设计(
21、等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询例:例:查询学生表中登记的学生的人数。SELECT COUNT(*)FROM 学生或SELECT COUNT(*)AS 学生人数 FROM 学生或SELECT COUNT(学号)AS 学生人数 FROM 学生注:(1)此时“学号”前面加不加DISTINCT 所得到的结果都是一致的,因为在学生表中“学号”值是彼此不同的。(2)当查询列是表达式或函数时,常对列进行命名。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询例:例:查询学生表中年龄在18岁至20岁之间的男生
22、的人数。SELECT COUNT(*)AS 人数 FROM 学生;WHERE 年龄 between 18 and 20 AND 性别=“男”或SELECT COUNT(学号)AS 人数 FROM 学生;WHERE 年龄 between 18 and 20 AND 性别=“男”Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询 SUM求和函数,计算指定列中数值的总和。AVG求平均值函数,计算列中数值的平均值。MAX最大值函数,求指定列中的最大值。MIN最小值函数,求指定列中的最小值。注:这些函数可以在SELECT短语中对查询
23、结果进行计算。Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询例例4.11 计算支付给所有职工的工资总额。SELECT SUM(工资)AS 工资总额 FROM zg查询结果:Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.7 简单的计算查询例例4.12 求所在地为“北京”和“西安”的仓库的职工的工资总和。SELECT SUM(工资)AS 工资总和 FROM zg;WHERE 仓库号 IN;(SELECT 仓库号 FROM ck WHERE 城市=“北京”OR 城市=
24、“西安”)或SELECT SUM(工资)AS 工资总和 FROM zg,ck;WHERE zg.仓库号=ck.仓库号 AND (城市=“北京”OR 城市=“西安”)Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)4.2.8 分组与计算查询 在SELECT-SQL命令中,常用GROUP BY子句对查询结果进行分组。其短语的格式如下:GROUP BY GroupColumn,GroupColumn HAVING FilterCondition指定分组字段,分组字指定分组字段,分组字段可以有多个。段可以有多个。对分组对分组结果进结果进行筛选行筛选指定筛
25、选指定筛选条件条件Visual FoxProVisual FoxPro程序设计(等级考试版)程序设计(等级考试版)l 使用GROUP BY进行分组时,查询结果是指定表按分组的记录集。l 可以按一列或多列分组,还可以用HAVING进一步限定分组的条件。l GroupColumn可以是表的字段,也可以是一个数值表达式。l HAVING子句总是跟在GROUP BY子句之后,而不可以单独使用。注:当使用 group by 时,查询列(即紧跟在select后面的字段名或表达式)中除了在group by中出现的那(些)个字段可以以字段名形式出现外,其他的列上要用统计函数(sum,max,min,count
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL
限制150内