Oracle的分组查询以及子查询
分组查询
关键字:group by 分组字段名,分组字段名……
注意:使用了分组语句后,select语句后面必须出现多行函数或者分组字段名
按多字段分组时,先按照第一个字段分,每个小组再按照第二个字段分,以此类推
where子句中不允许出现多行函数
筛选关键字having
作用:对分组后的数据进行筛选,可以使用多行函数
注意:having关键字必须和分组函数一起使用,不能单独使用
sql子句执行顺序
--from-->where--->group by-->select--->having--->order by
可见,筛选时,在where子句中筛选比在having子句中筛选执行效率高
查询所管理人数大于3个的领导的id
select manager_id,count(*)
from s_emp
group by manager_id
having count(*)>3
子查询:
当查询条件不明确时,可以考虑子查询
查询工资比Chang工资高的人名
select salary from s_emp where last_name='Chang'; 得到chang的工资为800
select last_name from s_emp where salary >800; 得到所要的人名
把两条语句结合起来可以得到:
select last_name from s_emp where salary >(select salary from s_emp where last_name='Chang')
当子句中只有一条结果时可以使用比较符连接,否则要用in,not in ,any或all连接
关键字 :any :任意 from 表名 select 内容 from 表名 where 字段名 比较运算符 any 子查询语句
in 任意,相当于= any select 内容 from 表名 where 字段名 in 子查询语句
all所有 select 内容 from 表名 where 字段名 比较运算符 all 子查询语句