欢迎来到天天文库
浏览记录
ID:40107983
大小:1.51 MB
页数:41页
时间:2019-07-21
《关系数据库标准语言sql11》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1职工仓库号职工号工资仓库仓库号城市面积供应商供应商号供应商名地址订购单职工号供应商号订购单号订购日期2本章首页本节首页上一页(六)分组及计算查询SQL语言是完备的,也就是说,只要数据按关系方式存入数据库,就能有构造合适的SQL命令把它检索出来。事实上,SQL不仅具有一般的检索能力,而且还有计算方式的检索,比如检索职工的平均工资、检索某个仓库中职工的最高工资值等。用于计算检索的函数有:1.COUNT——计数2.SUM——求和3.AVG——计算平均值4.MAX——求最大值5.MIN——求最小值这些函数可以用在
2、SELECT短语中对查询结果进行计算。3本章首页本节首页上一页例20.找出供应商所在地的数目。SELECTCOUNT(DISTINCT地址)FROM供应商;供应商关系共有三个地址:北京、西安和郑州,所以结果为三。注意,除非对关系中的元组个数进行计数,一般COUNT函数应该使用DISTINCT。比如:SELECTCOUNT(*)FROM供应商;将给出供应商关系中的记录数。供应商(供应商号,单位,地址)例21.求支付的工资总数。SELECTSUM(工资)FROM职工;结果是:6160这个结果是职工关系中工资值的
3、总和,它并不管是否有重复值。这时若使用命令:SELECTSUM(DISTINCT工资)FROM职工;将得出错误的结果4910职工仓库号职工号工资供应商供应商号供应商名地址4例22.求北京和上海的仓库职工的工资总和。SELECTSUM(工资)FROM职工;WHERE仓库号IN(SELECT仓库号FROM仓库WHERE城市=“北京”OR城市=“上海”);结果是:4930例23.求所有职工的工资都多于1210元的仓库的平均面积。SELECTAVF(面积)FROM仓库WHERE仓库号NOTIN(SELECT仓库号F
4、ROM职工WHERE工资<=1210);结果是:366.67本章首页本节首页上一页职工仓库号职工号工资仓库仓库号城市面积5本章首页本节首页上一页这里要注意,以上结果的运算包含了尚没有职工的WH4仓库。如果要排除此仓库,语句应该改为:SELECTAVG(面积)FROM仓库WHERE仓库号NOTIN(SELECT仓库号FROM职工WHERE工资<=1210)AND仓库号IN(SELECT仓库号FROM职工);350结果是:例24.求在WH2仓库工作的职工的最高工资值。SELECTMAX(工资)FROM职工;WH
5、ERE仓库号=“WH2”;1250结果是:与MAX函数相对就的是MIN函数(求最小值)。比如,求最低工资值可以有如下命令:SELECTMIN(工资)FROM职工;WHERE仓库号=“WH2”;上面几个例子是对整个关系的计算查询,而利用GROUPBY子句进行分组计算查询使用的更加广泛。职工仓库号职工号工资仓库仓库号城市面积6本章首页本节首页上一页例25.求每个仓库的职工平均工资。SELECT仓库号,AVG(工资)FROM职工GROUPBY仓库号;WH11230WH21235WH31230结果是:在这个查询中,
6、首先按仓库号属性进行分组,然后再计算每个仓库的平均工资。GROUPBY子句一般跟在WHERE子句之后,没有WHERE子句时,跟在FROM子句之后。另外,还可以根据多个属性进行分组。在分组查询时,有时要求分组满足某个条件时才检索,这时可以用HAVING子句来限定分组。例26.求至少有两个职工的以上仓库的平均工资。!!!SELECT仓库号,COUNT(*),AVG(工资)FROM职工;GROUPBY仓库号HAVINGCOUNT(*)>=2;WH121230WH221235结果是:HAVING子句总是跟在GROU
7、PBY子句之后,不可以单独使用。HAVING子句和WHERE子句不矛盾,在查询中是先用WHERE子句限定元组,然后进行分组,最后再用HAVING子句限定分组。职工仓库号职工号工资7本章首页本节首页上一页COMPUTE子句的格式GROUPBY子句能完成汇总,但是却不能显示细节。当我们希望在分组的细节后显示汇总结果时,GROUPBY子句就无能为力了。这时我们可以使用COMPUTE子句,该子句的功能和GROUPBY子句有相似之处,即可以完成分组汇总的功能;不同之处是利用COMPUTE子句,汇总结果是附加在细节之后
8、显示的,这样用户既能看到细节,又能看到汇总行。COMPUTE<函数名>(<列名>)[,<函数名>(<列名>)…][BY<列名>[,<列名>…]]这里<函数名>只能是用于SELECT计算查询的函数SUM、AVG、MIN、MAX和COUNT。COMPUTE子句中的BY子句是用来说明分组的,如果在COMPUTE子句中不使用BY子句,则是对整个表进行汇总。需要强调的是如果这里使用BY子句,也必须使用ORDERBY子句,B
此文档下载收益归作者所有