Oracle笔记收集整理(1)(二)

2014-11-24 16:55:51 · 作者: · 浏览: 1
- 2013-07-30 10:23:31 =========================================

排序:
order by 列名, ...
可以作用在:数字、日期、字符串。
可以使用列名,表达式,别名,序号(表示select中的第几个列)
升序、降列
按一个列排列,按多个列排序
当order by所在的列中有null,会:
升序时,null的在下面。
降序时,null的在上面。
我们希望,不管升序还是降序,null值的始终在下面
方式一:SQL> select * from emp order by comm desc nulls last;
方式二:
select empno, ename, job, hiredate, sal, nvl(comm, 0) 
from emp 
order by 6 desc
=====================================================

1,组函数
select 
max(sal) 最高工资, 
min(sal) 最低工资, 
avg(sal) 平均工资, 
sum(sal) 所有员工的工资和, 
count(sal) 领工资的员工数量
from emp;
2,组函数对null的处理
例,查询所有员工的平均奖金(有人的奖金为null)
select sum(comm)/count(*) 平均奖金 from emp
组函数会自动过滤掉null值。
在使用avg()时要注意处理null值:
select avg( nvl(comm, 0) ) from emp;
函数可以嵌套使用

3,分组
Group by,写在FROM后,如果有WHERE,就在WHERE后面。
查询的列一定要是:
在group by中出现的列(在Select中不一定全写上)
或是使用组函数
按一个列分组
按多个列分组
参与分组的多个列有一个不相同就是不同的组。
4,分组结果过滤
Having,是分完组后再进行过滤,只显示符合条件的结果。
在Group by与Having中都不可以使用别名。
与Where的区别
Having是是分完组后再进行过滤。
Where是先过滤,再进行分组操作。
如果可以,尽量写Where条件,不写Having。
Select
...
From
...
Where
...
Group by 
...
Having
...
Order by
...
================================================
子查询:
当一步不能求解时,可以使用子查询。
分为:
单行子查询
多行子查询
可以在主查询的select, from, where, having 都可以放子查询
不可以在主查询的group by 放子查询
单行操作符对应单行子查询,多行操作符对应多行子查询
在select中放子查询时,要求只能是单行子查询。
IN:
ANY:
小于某集合中的任意一个值,就是小于集合中的最大值。
大于某集合中的任意一个值,就是大于最小值。
ALL:
小于某集合中的所有值,就是小于最小值。
大于某集合中的所有值,就是大于最大值。