关系数据库标准语言SQL12课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《关系数据库标准语言SQL12课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL12 课件
- 资源描述:
-
1、1职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积供应商供应商供应商号供应商号供应商名供应商名地址地址订购单订购单职工号职工号供应商号供应商号订购单号订购单号订购日期订购日期2本章首页本章首页本节首页本节首页上一页上一页(六)分组及计算查询(六)分组及计算查询 SQL语言是完备的,也就是说,只要数据按关系方式存入数据库,语言是完备的,也就是说,只要数据按关系方式存入数据库,就能有构造合适的就能有构造合适的SQL命令把它检索出来。事实上,命令把它检索出来。事实上,SQL不仅具有一不仅具有一般的检索能力,而且还有般的检索能力,而且还有计算方式计算方式的检索,比如检索职工
2、的平均工资、的检索,比如检索职工的平均工资、检索某个仓库中职工的最高工资值等。用于计算检索的函数有:检索某个仓库中职工的最高工资值等。用于计算检索的函数有:1COUNT计数计数2SUM 求和求和3AVG 计算平均值计算平均值4MAX 求最大值求最大值5MIN 求最小值求最小值 这些函数可以用在这些函数可以用在SELECT短语中对查询结果进行计算。短语中对查询结果进行计算。3本章首页本章首页本节首页本节首页上一页上一页例例20找出供应商所在地的找出供应商所在地的数目数目。SELECT COUNTCOUNT(DISTINCT DISTINCT 地址)地址)FROM 供应商;供应商;供应商关系共有三
3、个地址:北京、西安和郑州,所以结果为三。注意,除供应商关系共有三个地址:北京、西安和郑州,所以结果为三。注意,除非对关系中的元组个数进行计数,一般非对关系中的元组个数进行计数,一般 COUNT函数应该使用函数应该使用DISTINCT 。比如:比如:SELECT COUNT(*)FROM 供应商;供应商;将给出供应商关系中的记录数。将给出供应商关系中的记录数。供应商供应商(供应商号供应商号,单位单位,地址地址)例例21求支付的工资总数。求支付的工资总数。SELECT SUMSUM(工资)工资)FROM 职工;职工;结果是:结果是:6160 这个结果是职工关系中工资值这个结果是职工关系中工资值的总
4、和,它并不管是否有重复值。的总和,它并不管是否有重复值。这时若使用命令:这时若使用命令:SELECT SUM(DISTINCT 工资)工资)FROM 职工;职工;将得出错误的结果将得出错误的结果4910 职工职工仓库号仓库号职工号职工号工资工资供应商供应商供应商号供应商号供应商名供应商名地址地址4例例22求北京和上海的仓库职工的工资总和。求北京和上海的仓库职工的工资总和。SELECT SUM(工资)工资)FROM 职工;职工;WHERE 仓库号仓库号 IN(SELECT 仓库号仓库号 FROM 仓库仓库 WHERE 城市城市=“北京北京”OR 城市城市=“上海上海”););结果是结果是:493
5、0 例例23求所有职工的工资都多于求所有职工的工资都多于1210元的仓库的平均面积。元的仓库的平均面积。SELECT AVFAVF(面积)面积)FROM 仓库仓库WHERE 仓库号仓库号 NOT INNOT IN (SELECT 仓库号仓库号 FROM 职工职工 WHERE 工资工资=1210);结果是结果是:36667 本章首页本章首页本节首页本节首页上一页上一页职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积5本章首页本章首页本节首页本节首页上一页上一页 这里要注意,以上结果的运算包这里要注意,以上结果的运算包含了尚没有职工的含了尚没有职工的WH4仓库。如果仓库
6、。如果要排除此仓库,语句应该改为:要排除此仓库,语句应该改为:SELECT AVG(面积)面积)FROM 仓库仓库WHERE 仓库号仓库号 NOT IN (SELECT 仓库号仓库号 FROM 职工职工 WHERE 工资工资=2=2;WH1 2 1230WH2 2 1235 结果是结果是:HAVINGHAVING子句总是跟在子句总是跟在GROUP GROUP BYBY子句之后,不可以单独使用。子句之后,不可以单独使用。HAVING子句和子句和WHERE子句不子句不矛盾,在查询中是矛盾,在查询中是先用先用WHERE子句子句限定元组,限定元组,然后进行分组然后进行分组,最后再用,最后再用HAVIN
7、G子句限定分组。子句限定分组。职工职工仓库号仓库号职工号职工号工资工资7本章首页本章首页本节首页本节首页上一页上一页COMPUTE子句的格式子句的格式 GROUP BY子句能完成汇总,但是却不能显示细节。当我们希望在子句能完成汇总,但是却不能显示细节。当我们希望在分组分组的细节的细节后显示汇总结果时,后显示汇总结果时,GROUP BY子句就无能为力了。子句就无能为力了。这时我们可以使用这时我们可以使用COMPUTECOMPUTE子句子句,该子句的功能和,该子句的功能和GROUP BY子句子句有相似之处,即可以完成分组汇总的功能;不同之处是利用有相似之处,即可以完成分组汇总的功能;不同之处是利用
8、COMPUTE子句,子句,汇总结果汇总结果是是附加在细节之后显示附加在细节之后显示的,这样用户既能看到细节,又能看到汇总的,这样用户既能看到细节,又能看到汇总行。行。COMPUTE(),()BY,这里这里只能是用于只能是用于SELECT计算查询的函数计算查询的函数SUMSUM、AVGAVG、MINMIN、MAXMAX和和COUNTCOUNT。COMPUTE子句中的子句中的BYBY子句子句是用来是用来说明分组说明分组的,如果在的,如果在COMPUTE子句中子句中不使用不使用BY子句,则是对整个表进行汇总。子句,则是对整个表进行汇总。需要强调的是如果这里使用需要强调的是如果这里使用BY子句,子句,
9、也必须使用也必须使用ORDER BYORDER BY子句子句,BYBY 子句指出的列必须和子句指出的列必须和ORDER BYORDER BY 子句指出的列顺序相同,但子句指出的列顺序相同,但BY子句的子句的列数可以少于列数可以少于ORDER BY子句的列数。子句的列数。8SELECTDISTINCTFROMWHEREBYGROUPHAVINGBYORDERASCDESC9本章首页本章首页本节首页本节首页上一页上一页比如,比如,ORDER BY子句是:子句是:ORDER BY a,b,cORDER BY a,b,c COMPUTEBy子句的三种形式:子句的三种形式:COMPUTEBy a,b,c
10、 COMPUTEBy a,b COMPUTEBy a例例27列出职工全部记录并计算各仓库的平均工资小计,最后给出全体职工列出职工全部记录并计算各仓库的平均工资小计,最后给出全体职工的平均工资和工资总和(使用的平均工资和工资总和(使用COMPUTEBY)。)。SELECT 仓库号,职工号,工资仓库号,职工号,工资FROM 职工职工ORDER BY ORDER BY 仓库号仓库号COMPUTE AVG(工资),工资),SUM(工资)工资)BY BY 仓库号仓库号COMPUTE AVG(工资),工资),SUM(工资);工资);职工职工仓库号仓库号职工号职工号工资工资10 sum =1230 avg
11、=1232 sum =6160结果是:结果是:WH1 E3 1210 WH1 E7 1250 avg =1230 sum =2460 WH2 E1 1220 WH2 E4 1250 avg =1235 sum =2470 WH3 E6 1230 avg =1230例例28列出职工全部记录并计算全体职工列出职工全部记录并计算全体职工 的平均工资和工资总和(使用的平均工资和工资总和(使用 COMPUTE)。)。SELECT 仓库号,职工号,工资仓库号,职工号,工资FROM 职工职工COMPUTE AVG(工资),工资),SUM(工资);工资);结果是:结果是:WH2 E1 1220WH1 E3 1
12、210WH2 E4 1250WH3 E6 1230WH1 E7 1250 avg =1232 sum =6160 职工职工仓库号仓库号职工号职工号工资工资11职工号职工号供应商号供应商号订购单号订购单号订购日期订购日期E3 E1 E7 E6 E3 E1 E3 E3OR67 OR73 OR76 OR77 OR79 OR80 OR90 OR91S7 S4 S4S4S31998/06/23 1998/07/28 1998/05/251998/06/131998/07/13(七七)利用空值查询利用空值查询 假设在假设在订购单订购单关系中,一名职工正在准备订购单,但尚未选定供应商,这关系中,一名职工正在
13、准备订购单,但尚未选定供应商,这样若把信息存入数据库,则供应商号和订购日期两个属性均为空值,如下表所样若把信息存入数据库,则供应商号和订购日期两个属性均为空值,如下表所示。示。E6 OR77E1 OR80E3 OR90 注意,查询空值时要使用注意,查询空值时要使用IS NULL;而而=NULL是无效的,因为空值不是一是无效的,因为空值不是一个确定的值,所以不能用个确定的值,所以不能用“=”这样的这样的运算符进行比较。运算符进行比较。SELECT*FROM 订购单订购单WHERE 供应商号供应商号 IS NULLIS NULL;结果是结果是(参见上表参见上表):例例29找尚未确定供应商的订购单。
14、找尚未确定供应商的订购单。订购单订购单12表4-4 常用的查询条件查询条件查询条件谓谓 词词比比 较较=、=、=、!=、!、!;确定范围确定范围BETWEEN AND,NOT BETWEEN AND确定集合确定集合IN,NOT IN字符匹配字符匹配LIKE,NOT LIKE%和和 _ _空 值IS NULL,IS NOT NULL多重条件多重条件AND,OREXISTS、NOT EXISTS UNIQUE ALL、ANY13 例例30列出已经确定了供应商的订购单信息。列出已经确定了供应商的订购单信息。E3 S7 OR67 1998/06/28E1 S4 OR73 1998/07/28E7 S4
15、 OR76 1998/05/25E3 S4 OR79 1998/06/13E3 S3 OR91 1998/07/13 SELECT*FROM 订购单订购单WHERE 供应商号供应商号 IS IS NOT NULL;结果是结果是:本章首页本章首页本节首页本节首页上一页上一页订购单订购单职工号职工号供应商号供应商号订购单号订购单号订购日期订购日期14(一)简单查询(一)简单查询(二)连接查询(二)连接查询 (三)嵌套查询(三)嵌套查询 (四)几个特殊算符(四)几个特殊算符 (六)分组及计算查询(六)分组及计算查询 (七)利用空值查询(七)利用空值查询 (五)排序查询(五)排序查询 SQLSQL查询
16、语句查询语句15SELECT 城市城市FROM 仓库仓库WHERE 仓库号仓库号 IN (SELECT 仓库号仓库号 FROM 职工职工 WHERE 职工号职工号 IN (SELECT 职工号职工号 FROM订订 订购单订购单 WHERE 供应商号供应商号 IN (SELECT 供应商号供应商号 FROM 供应商供应商 WHERE 地址地址=“北京北京”);结果是结果是:北京北京 上海上海(八)多层嵌套查询(八)多层嵌套查询 例例3131找出找出哪些城市哪些城市的仓库向的仓库向北京北京的的供应商供应商发出了发出了订购单订购单。这里我们所要求的信息出自仓库关系,但相关条件与订购单关系有关,为这里
17、我们所要求的信息出自仓库关系,但相关条件与订购单关系有关,为此又要涉及到职工关系和订购单关系和此又要涉及到职工关系和订购单关系和供应商供应商关系,也就是说这个查询将涉及关系,也就是说这个查询将涉及到四个关系。到四个关系。事实上,我们希望检索的是仓库元组,最后这个订购单元组要对应一个地事实上,我们希望检索的是仓库元组,最后这个订购单元组要对应一个地址属性值为址属性值为“北京北京”的供应商元组。完成这个查询的的供应商元组。完成这个查询的SQL命令是:命令是:职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积供应商供应商供应商号供应商号供应商名供应商名地址地址订购单订购单职
18、工号职工号供应商号供应商号订购单号订购单号订购日期订购日期16例例32给出有给出有北京仓库订购单北京仓库订购单的的北京供应商北京供应商的名称。的名称。SELECT 供应商名供应商名FROM 供应商供应商WHERE 地址地址=“北京北京”ANDAND 供应商号供应商号 ININ (SELECT 供应商号供应商号 FROM 订购单订购单 WHERE 职工号职工号 IN (SELECT 职工号职工号 FROM 职工职工 WHERE 仓库号仓库号 IN (SELECT 仓库号仓库号 FROM 仓库仓库 WHERE 城市城市=“北京北京”);结果是:结果是:爱华电子厂爱华电子厂华通电子公司华通电子公司
19、职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积供应商供应商供应商号供应商号供应商名供应商名地址地址订购单订购单职工号职工号供应商号供应商号订购单号订购单号订购日期订购日期17(九)别名和自连接查询(九)别名和自连接查询 SELECT 供应商名供应商名FROM 供应商,订购单,职工,仓库供应商,订购单,职工,仓库WHERE 地址地址=“北京北京”AND 仓库仓库.城市城市=“北京北京”AND 供应商供应商.供应商号供应商号=订购单订购单.供应商号供应商号 AND 订购单订购单.职工号职工号=职工职工.职工号职工号 AND 订购单订购单.仓库号仓库号=仓库仓库.仓库号
20、;仓库号;例例33用用连接操作连接操作完成上例的查询。完成上例的查询。这是一个基于多个关系的连接操作。一般能用嵌套查询完成的操作,这是一个基于多个关系的连接操作。一般能用嵌套查询完成的操作,都能用等价的连接查询完成;但是,反之却不一定。一般当都能用等价的连接查询完成;但是,反之却不一定。一般当查询的数据查询的数据出出自多个关系时,就不适合用嵌套查询自多个关系时,就不适合用嵌套查询,能用连接查询。能用连接查询。职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积供应商供应商供应商号供应商号供应商名供应商名地址地址订购单订购单职工号职工号供应商号供应商号订购单号订购单号订购
21、日期订购日期18(九)别名和自连接查询(九)别名和自连接查询 例例33用用连接操作连接操作完成上例的查询。完成上例的查询。在连接操作中,经常需要使用关系名作前缀,有时这样显得很麻烦。因此,在连接操作中,经常需要使用关系名作前缀,有时这样显得很麻烦。因此,SQL允许在允许在FROM短语中为关系名定义别名,格式为:短语中为关系名定义别名,格式为:比如,刚才的连接比如,刚才的连接语句可以写为:语句可以写为:SELECT 供应商名供应商名FROM 供应商供应商 S,订购单订购单 P,职工职工 E,仓库仓库 WWHERE 地址地址=“北京北京”AND W.城市城市=“北京北京”AND S.供应商号供应商
22、号=P.供应商号供应商号 AND P.职工号职工号=E.职工号职工号 AND E.仓库号仓库号=W.仓库号仓库号 职工职工仓库号仓库号职工号职工号工资工资仓库仓库仓库号仓库号城市城市面积面积供应商供应商供应商号供应商号供应商名供应商名地址地址订购单订购单职工号职工号供应商号供应商号订购单号订购单号订购日期订购日期19 在这个例子中,别名并不是必须的,但是在关系的在这个例子中,别名并不是必须的,但是在关系的自连接操作自连接操作中,别名就中,别名就是必不可少的了。是必不可少的了。SQL不仅可以对多个关系实行连接操作,也可以将同一关系不仅可以对多个关系实行连接操作,也可以将同一关系与其自身进行连接,
23、这种连接就称为与其自身进行连接,这种连接就称为自连接自连接。在可以进行这种自连接操作的关。在可以进行这种自连接操作的关系上,实际存在着一种特殊的递归联系,即关系中的一些元组,根据出自同一系上,实际存在着一种特殊的递归联系,即关系中的一些元组,根据出自同一个值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的联个值域的两个不同的属性,可以与另外一些元组有一种对应关系(一对多的联系)。系)。本章首页本章首页本节首页本节首页上一页上一页为了说明自连接,我们假设有一个雇员关系:为了说明自连接,我们假设有一个雇员关系:雇员(雇员号,雇员姓名,经理)雇员(雇员号,雇员姓名,经理)其中雇员号和经
24、理两个属性出自同一个值域,同一元组的这两个属性值是其中雇员号和经理两个属性出自同一个值域,同一元组的这两个属性值是“上、下级上、下级”关系。侧图说明了雇员关系和它的一个实例。关系。侧图说明了雇员关系和它的一个实例。20雇员姓名雇员姓名雇员号雇员号经理经理1:n雇员雇员雇员号雇员号 雇员姓名雇员姓名经理经理E3 E4 E6 E8赵涌赵涌 钱潮钱潮 孙洁孙洁 李渌李渌E3 E3 E3 E6例例34根据雇员关系列出上一级经理及其职员(被其领导)的清单。根据雇员关系列出上一级经理及其职员(被其领导)的清单。SELECT S.雇员姓名,雇员姓名,“领导领导”,E.雇员姓名;雇员姓名;FROM 雇员雇员
25、S,雇员雇员 EWHERE S.雇员号雇员号=E.经理经理;结果是:结果是:赵涌赵涌 领导领导 钱潮钱潮 赵涌赵涌 领导领导 孙洁孙洁 孙洁孙洁 领导领导 李渌李渌 这里通过定义别名形成了两个逻辑关系,一个是经理关系这里通过定义别名形成了两个逻辑关系,一个是经理关系S,一个是职员一个是职员关系关系E,结果在关系结果在关系S和和E上的连接实现了我们的检索要求。另外,在上的连接实现了我们的检索要求。另外,在SELECT短语中可以有常量,如这里的短语中可以有常量,如这里的“领导领导”。本章首页本章首页本节首页本节首页上一页上一页21(十)内、外层互相关嵌套查询(十)内、外层互相关嵌套查询 事实上,有
展开阅读全文