ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL菜鸟笔记之第十篇 SQL多行函数

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

原创 Linux操作系统 作者:lurou 时间:2011-08-31 16:35:13 0 删除 编辑

继续学习多行函数,本节的重点是要搞清楚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语句中各个部分的执行先后顺序:

 

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

SELECT---> FROM ---> WHERE---> GROUP BY---> 组函数---> HAVING ---> 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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-07-01

  • 博文量
    69
  • 访问量
    220619