[其它考试]第五章 关系数据库标准语言SQL.ppt
《[其它考试]第五章 关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《[其它考试]第五章 关系数据库标准语言SQL.ppt(109页珍藏版)》请在三一办公上搜索。
1、1,第5章 关系数据库标准语言SQL,目 录,上一页,下一页,退 出,2,本 章 要 点,5.1SQL语言的特点5.2数据查询 5.3数据操纵5.4数据定义5.5数据管理,3,SQL是结构化查询语言(Structured Query Language)的缩写。可以说查询是SQL语言的重要组成部分,但不是全部,SQL还包含资料定义、资料操纵和数据控制功能等部分。SQL已经成为关系数据库的标准数据语言,所以现在所有的关系数据库管理系统都支持SQL。现在的Visual FoxPro当然在这方面更加完善。,5.1 SQL语言特点,4,1.SQL是一种一体化的语言,它包括了资料定义、资料查询、资料操纵和
2、数据控制等方面的功能,它可以完成数据库活动中的全部工作。2.SQL语言是一种高度非过程化的语言,它没有必要一步步地告诉计算机“如何”去做,而只需要描述清楚用户要“做什么”。3.SQL语言非常简洁。虽然SQL语言功能很强,但它只有为数不多的几条命令,表5.1给出了分类的命令动词。它们分别是:数据查询命令 select;数据定义命令CREATE、DROP、ALTER;数据操纵命令INSERT、UPDATE、DELETE;数据控制命令GRANT、REVOAE。另外SQL的语法也非常简单,它很接近英语自然语言,因此容易学习、掌握。,5.1 SQL语言特点,5,4.SQL语言可以直接以命令方式交互使用,
3、也可以嵌入到程序设计语言中以程序方式使用。现在很多数据库应用开发工具都将SQL语言直接融入到自身的语言之中,使用起来更方便,Visual ForPro就是如此。这些使用方式为用户提供了灵活的选择余地。此外,尽管SQL的使用方式不同,但SQL语言的语法基础是一致的。Visual ForPro在SQL方面支持资料定义、资料查询和资料操纵功能,但在具体实现方面也存在一些差异。另外,Visual ForPro自身在安全控制方面的缺陷,所以它没有提供数据控制功能。,5.1 SQL语言特点,6,5.2 查询功能,数据库中的数据很多时侯是为了查询的,因此,数据查询是数据库的核心操作。而在SQL语言中,查询语
4、言中有一条查询命令,即SELECT语句。,7,5.2.1(简单查询)基本查询语句【格式】SELECT ALL|DISTINCT FROM【功能】无条件查询。【说明】ALL:表示显示全部查询记录,包括重复记录。为缺省值 DISTINCT:表示显示无重复结果的记录。,8,例5.1 从职工关系中检索所有工资值。Select 工资,职工号 from 职工&将显示查询结果,9,例5.2 检索仓库关系中的所有元组(即所有记录)sele*from 仓库&*表示所有字段,10,带条件(WHERE)的简单查询语句,【格式】SELECT ALL|DISTINCT FROM WHERE【功能】从一个表中查询满足条件
5、的数据。【说明】由一系列用AND 或 OR 连接的条件表达式组成,条件表达式的格式可以是以下几种:,11,(1)。(2)。(3)ALL()(4)ANY|SOME()(5)NOT BETWEEN AND(6)NOT EXISTS()(7)NOT IN(8)NOT IN()(9)NOT LINK,12,SQL支持的关系运算符如下:、!、。例5.3 检索工资多于1230元的职工号sele 职工号,工资 from 职工 where 工资1230,13,例5.4 检索哪些有工资多于1210元的职工的仓库。Sele dist 仓库号 from 职工 where 工资1210,14,例5.5 给出在仓库WH
6、1或WH2工作,工资少于1250的职工号。sele 职工号,工资 from 职工 where 工资1250 and;(仓库号=WH1 or 仓库号=WH2),15,【说明】在一个数据库中的多个表之间一般都存在着某些联系,在一个查询语句中同时涉及到两个或两个以上的表时,这种查询称之为连接查询(也称为多表查询)。在多表之间查询必须处理表与表之间的连接关系。SELECT ALL|DISTINCT FROM,表2.WHERE,5.2.2 简单的联接查询,16,例5.6 找出工资多于1230元的职工号和他们所在的城市。这里所要查询的职工号和城市分别出自职工表和仓库表,此类查询一般用联接查询来实现。联接查
7、询必须有联接条件。Sele 职工号,城市 from 职工,仓库;Where(工资1230)and(职工.仓库号=仓库.仓库号),17,18,例5.7 找出工作在面积大于400的仓库的职工号以及职工工作所在的城市。Select 职工号,城市 FROM 职工,仓库 WHERE;(面积400)and(职工.仓库号=仓库.仓库号),19,5.2.3嵌套查询,另一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。例 5.8 哪些城市至少有一个仓库的职工工资为1250元?要求查询仓库表中的城市信息,而查询条件是职工表中的工资字段值,因此可以使用嵌套查询来实现。Select
8、 城市 FROM 仓库 WHERE 仓库号 IN;(select 仓库号 FROM 职工 WHERE 工资=1250)在这个命令中有两个查询块,内层SELECT-FORM-WHERE查询块查询到的仓库号值是WH1和WH2,这样就等价于下面的命令:Select城市 FROM 仓库WHERE 仓库号IN(wh1,wh2)这里的IN相当于集合运算符。,20,21,例5.9 查询所有职工的工资都多于1210元的仓库的信息。或者说没有一个职工的工资少于或等于1210元的仓库的信息。Select*FROM 仓库 WHERE 仓库号 not IN;(select 仓库号 FROM 职工 WHERE 工资=1
9、210)内层SELECT-FORM-WHERE查询块指出所有职工的工资少于或等于1210元的仓库的仓库号值的集合,在这里该集合只有一个值“WH1”;然后从仓库关系中检索元组的仓库号属性值不在该集合中的每个元组。,22,23,如果要求排除那些还没有职工的仓库,检索要求可以叙述为:检索所以职工的工资都多于1210元仓库的信息,并且该仓库至少要有一名职工。Select*FROM 仓库 WHERE 仓库号 not IN;(select 仓库号 FROM 职工 WHERE 工资=1210);and 仓库号 IN(select 仓库号 FROM 职工),24,25,例5.10 找出和职工E4挣同样工资的所
10、有职工。Select 职工号 FROM 职工 WHERE 工资=;(Select 工资 FROM 职工 WHERE 职工号=E4),26,5.2.4 几个特殊运算符,在SQL SELECT中使用的几个特殊运算符,它们是BETWEENAND和LIKE等例5.11 检索出工资在1220元到1240元范围内的职工信息。Select*FROM 职工 WHERE 工资BETWEEN 1220 AND 1240,27,例5.12从供应商关系中检索出全部公司的信息。这个问题是一个字符串匹配的查询,可以使用LIKE运算符。Select*FROM 供应商 WHERE 供应商名 LIKE“%公司”,28,这里的L
11、IKE是一个字符串匹配运算符,通配符“%”表示0个或多个字符,通配符下划线“_”表示一个字符。,29,例5.13 找出不在北京的全部供应商信息。Select*FROM 供应商 WHERE 地址!=北京,30,5.2.5 排序,使用SQL SELECT可以将查询结果排序,排序的短语是ORDER BY.格式:ORDER BY Order_ItemASC DESC,Order_ItemASC DESC从中可以看出,可以按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。,31,例5.14按职工的工资升序检索出全部职工信息。Select*FROM 职工 ORDER BY 工资,32,例5.1
12、5先按仓库号排序,在按工资排序并输出全部职工信息。SELECT*FROM 职工 ORDER BY仓库号,工资,33,5.2.6 简单的计算查询,用于计算检索的函数有:COUNT记数SUM求和AVG计算平均值MAX求最大值MIN求最小值,34,例5.16找出供应商所在地的数目。SELECT COUNT(DISTINCT 地址)FROM 供应商 共有3个地址:北京、西安和郑州,所以结果为3。注意,除非对关系中的元组个数进行计数,一般COUNT函数应该使用DISTINCT。否则比如:SELECT COUNT(*)FROM供应商将给出供应商关系中的记录数(为4)。,35,例5.17 求支付的工资总数。
13、SELECT SUM(工资)FROM 职工结果是:6160这个结果是职工关系中的工资值的总和,它并不管是否有重复值。这时若使用命令:SELECT SUM(DISTINCT工资)FROM 职工将得出错误的结果4910。,36,例5.18 求北京和上海的仓库职工的工资总和。SELECT SUM(工资)FROM 职工 WHERE 仓库号IN;(SELECT 仓库号FROM 仓库 WHERE城市=”北京”OR城市=上海)结果是:4930,37,例5.19 求所有职工的工资都多于1210元的仓库的平均面积。SELECT AVG(面积)FROM仓库 WHERE仓库号NOT IN(SELECT 仓库号FRO
14、M 职工WHERE工资=1210)结果是:366.67这里要注意,以上结果的运算包含了尚没有职工的WH4仓库。如果要排除没有职工的仓库,以上语句应该改为:Select avg(面积)FROM 仓库 WHERE 仓库号 not IN;(select 仓库号 FROM 职工 WHERE 工资=1210);and 仓库号 IN(select 仓库号 FROM 职工)结果是:350,38,例5.20 求在WH2仓库工作的职工的最高工资值。SELECT MAX(工资)FROM 职工WHERE 仓库号=WH2结果是:1250与MAX函数相应的是MIN函数(求最小值)。比如,求最低工资值可以有如下命令:SE
15、LECT MIN(工资)FROM 职工WHERE仓库号=“WH2”,39,5.2.4 排序,在SQL中,可以使用ORDER BY短语将查询结果排序。其格式为:ORDER BY ASC|DESC,ASC|DESC例:按成绩由高到低排列学生信息。SELECT*FROM 成绩 ORDER BY 成绩 DESC,40,5.2.5 简单的计算查询,用于计算检索的函数:count-计数 sum-求和 avg-计算平均值 max-求最大值 min-求最小值例:求成绩总和。SELECT SUM(成绩)FROM 成绩,41,例5.16找出供应商所在地的数目。SELECT COUNT(DISTINCT 地址)FR
16、OM 供应商参见前面给出的供应商的记录值,其中共有3个地址:北京、西安和郑州,所以结果为3。注意,除非对关系中的元组个数进行计数,一般COUNT函数应该使用DISTINCT。否则比如:SELECT COUNT(*)FROM供应商将给出供应商关系中的记录数(为4)。,42,例5.17 求支付的工资总数。SELECT SUM(工资)FROM 职工结果是:6160这个结果是职工关系中的工资值的总和,它并不管是否有重复值。这时若使用命令:SELECT SUM(DISTINCT工资)FROM 职工表将得出错误的结果4910。,43,例5.18 求北京和上海的仓库职工的工资总和。SELECT SUM(工资
17、)FROM 职工 WHERE 仓库号IN;(SELECT 仓库号FROM 仓库 WHERE城市=”北京”OR城市=上海)结果是:4930,44,例5.19 求所有职工的工资都多于1210元的仓库的平均面积。SELECT AVG(面积)FROM仓库 WHERE仓库号NOT IN(SELECT 仓库号FROM 职工WHERE工资=1210)结果是:366.67这里要注意,以上结果的运算包含了尚没有职工的WH4仓库。如果要排除没有职工的仓库,以上语句应该改为:Select avg(面积)FROM 仓库 WHERE 仓库号 not IN;(select 仓库号 FROM 职工 WHERE 工资=121
18、0);and 仓库号 IN(select 仓库号 FROM 职工)结果是:350,45,例5.20 求在WH2仓库工作的职工的最高工资值。SELECT MAX(工资)FROM 职工WHERE 仓库号=WH2结果是:1250与MAX函数相应的是MIN函数(求最小值)。比如,求最低工资值可以有如下命令:SELECT MIN(工资)FROM 职工WHERE仓库号=“WH2”,46,5.2.7 分组与计算查询,GROUP BY短语的格式如下:GROUP BY GroupColumn,GroupColumnHAVING FilterCondition 可以按一列或多列分组,还可以用HAVING进一步限定
19、分组的条件。下面是几个分组计算查询的例子,47,例521 求每个仓库的职工的平均工资。SELECT 仓库号,AVG(工资)FROM 职工表GROUP BY 仓库号 结果是:WH1 1230WH2 1235WH3 1230在这个查询中,首先按仓库号属性进行分组,然后再计算每个仓库的平均工资。GROUPBY子句一般跟在WHERE子句之后,没有WHERE子句时,跟在FROM子句之后。另外,还可以根据多个属性进行分组。,48,例522求至少有两个职工的每个仓库的平均工资。SELECT 仓库号,COUNT(*),AvG(工资)FROM 职工;GROUP BY 仓库号 HAVING COUNT(*)=2结
20、果是:WH1 2 1230WH2 2 1235HAVING子句总是跟在GROUP BY子句之后,不可以单独使用。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。,49,5.2.8 利用空值查询,例523 找出尚未确定供应商的订购单SELECT*FROM 订购单表 WHERE 供应商号 IS NULL结果是:E6 NULL OR77 NULLE1 NULL OR80 NULLE3 NULL OR90 NULL注意:查询空值时要使用IS NULL,而=NULL是无效的,因此空值不是一个确定的值,所以不能用“=”这样的运算
21、符进行比较。,50,例524 列出已经确定了供应商的订购单信息。SELECT*FROM订购单表WHERE 供应商号IS NOT NULL结果是:E3 S7 OR67 2001/06/23E1 S4 OR73 2001/07/28 E7 S4 OR76 2001/05/25E3 S4 OR79 2001/06/13E3 S3 OR91 2001/07/13,51,52,5.2.9 别名与自联接查询,SQL允许在FROM短语中为关系名定义别名格式为:关系名别名 SELECT供应商名 FORM供应商表,订购单表,职工表,仓库表;WHERE 地址=“北京”AND 城市=“北京”;AND 供应商表.供应
22、商号=订购单表.供应商号;AND订购单表.职工号=职工表.职工号;AND 职工表.仓库号=仓库表.仓库号,53,SELECT 供应商名 RROM供应商 S,订购单P,职工E,仓库W;WHERE 地址=“北京”AND=城市=:“北京”;AND S.供应商号=P.供应商号;AND P职工号=E.职工号;AND E.仓库号=W.仓库号,54,5.2.10内外层互相关嵌套查询,有时也需要内、外层互相关的查询,这时内层查询的条件需要外层查询提供值,而外层查询的条件需要内层查询结果。例5.26 列出每个职工经手的具有最高总金额的订购单信息。这里先给出相应的查询语句,然后在作必要的解释。SELECT out
23、.职工号,out.供应商号,out.订购单号,out.订购日期,out.总金额;FROM 订购单表 out WHERE 总金额=;(SELECT MAX(总金额)FROM 订购单表 inner1;WHERE out.职工号=inner1.职工号),55,56,5.2.11 使用量词和谓词的查询,和嵌套查询或子查询有关的IN和NOT IN运算符,除此之外还有两类和子查询有关的运算符,它们有以下两种形式:ANY|ALL|SOME(子查询)NOTEXISTS(子查询),57,ANY、ALL和SOME是量词,其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而
24、ALL则要求子查询中的所有行都使结果为真时,结果才为真。EXISTS是谓词,EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。,58,例5.27 检索那些仓库中还没有职工的仓库的信息。这里的查询是没有职工或不存在职工,所以可以使用谓词NOT EXISTS:SELECT*FROM仓库 WHERE NOT EXISTS;(SELECT*FROM职工 WHERE仓库号=仓库.仓库号)注意:这里的内层查询引用了外层查询的表,只有这样使用谓词EXISTS或NOT EXISTS才有意义。所以这类查询也都是内、外层互相嵌套查询。以上的查询等价于:SELECT*FR
25、OM仓库 WHERE仓库号 NOT IN;(SELECT 仓库号 FROM 职工)结果是:WH4 武汉 400,59,例5.28 检索那些仓库中至少已经有一个职工的仓库的信息。SELECT*FROM仓库表WHERE EXISTS;(SELECT*FROM职工表WHERE 仓库号=仓库.仓库号)它等价于:SELECT*FROM 仓库表 WHERE 仓库号 IN;(SELECT 仓库号 FROM 职工表)结果是:WH1 北京 370WH2 上海 500WH3 广州 200注意:NOTEXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。,60,例5.29 检索有职工的工资大
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 其它考试 其它考试第五章 关系数据库标准语言SQL 其它 考试 第五 关系 数据库 标准 语言 SQL
链接地址:https://www.31ppt.com/p-4998525.html