SQL菜鸟笔记之第十篇 SQL多行函数

继续学习多行函数,本节的重点是要搞清楚SELECT语句中各个部分执行的先后顺序。


1、组函数
AVG 求平均值
COUNT 计数
MAX 求最大值
MIN 求最小值
STDDEV 求标准方差
SUM 求和
VARIANCE 求偏差

小提示一下,组合函数默认会忽略空的列值,在做计算时如果需要的话,可以配合使用NVL等函数。

2、GROUP BY
2.1在GROUP BY和WHERE子句中不能使用别名;在ORADER BY子句中可以使用别名。
2.2所有被SELECT的列,若不包括在组合函数的列参数内,那就必须包含在GROUP BY的参数内,否则就会报错。

SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id;

语句内各部分执行顺序解析:
第一步:查出department_id,没问题,很顺利;
第二步:AVG(salary)的优先级排最后,先不查。这里应该是进行GROUP BY的操作。
【 WHERE子句和GROUP BY子句放在一起的时候,先执行WHERE子句,本例子没有就不说了,直接执行GROUP BY操作。顺便提一下,ORADER BY子句一般是放在整个SELECT语句的最后面的,执行顺序肯定也落后于GROUP BY。】

第三步:最后执行AVG(salary)。,对分组后的列再求平均值。
【 想一想一个细节,如果这里没有GROUP BY进行分组,那求出来的平均值也就一个,而现在这里应该是有多个对应于各个部门的平均值。】

3、GROUP BY (多个列参数)

当需要对已经分组的数据再次进行分组的时候,直接在GROUP BY后面跟多个参数即可,再次分组的顺序按照参数的先后位置进行

4、HAVING子句

在数据分组之前是用WHERE子句来对数据进行筛选的,但是在数据被分组之后,若需要对数据进行筛选就得用HAVING子句。

用一张图来回顾一下SELECT语句中各个部分的执行先后顺序:

26006637_201108311638441.thumb.jpg

 

再次总结一下,执行的先后顺序应该是:

SELECT---&gt FROM ---&gt WHERE---&gt GROUP BY---&gt 组函数---&gt HAVING ---&gt ORDER BY

5、常见的跟分组有关的错误语句

SELECT department_id,COUNT(last_name) FROM employees;

SELECT department_id,job_id,COUNT(last_name) FROM employees

GROUP BY department_id;

6、笛卡尔乘积

主要用于产生大量测试数据,其它时候我们都是要尽量避免笛卡尔乘积的。

7、outer join

left outer join 连接2表并显示左表不匹配的部分

right outer join 连接2表并显示右表不匹配的部分

full outer join 连接2表并显示2表不匹配的部分

oracle的语法中是用(+)来表示的,不过有个地方要注意下,显示的是该符号所在的表对面的表的不匹配部分,说来绕口,自己实践一下马上明白。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26006637/viewspace-706355/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26006637/viewspace-706355/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值