oracle学习总结(三)

来源:互联网 发布:利淘网淘宝 编辑:程序博客网 时间:2024/05/16 19:11

一.组函数
1.常用的组函数
count(),avg(),max(),min(),sum()
2.sql中分组语句
group by
注意:where 后面不能出现组函数。
但可以间接使用
select id,last_name,salary from s_emp where salary<(select avg(salary) from s_emp);
如果要使用组函数条件限定,条件应该写在having的后面。
1)select 如果使用了组函数,那么没有使用组
函数的列需要放入到group by子句中
2)select 如果使用了组函数,那么没有使用组
函数的列需要放入到group by子句中
3)group by 可以涉及到多级分组,即
group by后指定多列
group by dept_id,title :求统一部门里统一职位的工资
4) having 子句中不能使用别名
目前为止select 语句的关键字顺序应该为
select..
from..
where…
group by…
having…
order by…
二. 子查询
1.查询里面嵌套查询
在执行数据操作的过程中,如果某个数据需要依赖于另外一个select语句查询出的结果,那么就可以把select语句嵌入到该操作中,这样就形成了一个子查询
位置:在增删改查命令中允许使用一个表达式的地方,都可以包含子查询
*****i 单行子查询 是指子查询语句只返回一条结果
ii 多行子查询 子查询语句返回多行数据*
1.1 在where条件中使用子查询,必须使用in any all
a>in
对所有子查询结果进行一一匹配可以看做是一个比较运算符
b> any
不能看做是一个比较运算符
必须结合单行运算符进行使用 = > < >= <=
主查询只要匹配任意子查询结果即可

any() 大于子查询结果的最小值

<any()  小于子查询结果的最大值 c> all  不能看做是一个比较运算符必须结合单行运算符进行使用 = > < >= <= >all() 大于最大<all() 小于最小值

2.子查询可以用在from后面
充当一个表 (这种做法一般比较容易忽略。)
这里写图片描述
如:查询每一个部门的员工小于该部门的平均工资的员工的信息?
select last_name,salary
from s_emp,(
select avg(salary) avg,dept_id
from s_emp
group by dept_id
) a where s_emp.dept_id=a.dept_id and salary