select e.dept_id from emp e GROUP BY e.dept_id
-
wher 是过滤分组前的数据,having 是过滤分组后的数据,where必须在group by 之前,having必须在group by 之后
select e.dept_id,avg(e.salary) from emp e. -
查询出每个部门工资高于800的员工的平均工资,然后在查询出工资高于2000的部门
select e.dept_id,avg(e.salary) asal
from emp e where e.salary > 800 group by e.dept_id HAVING avg(e.salary) > 2000 -
查询所以员工数据,以及员工所属部门
select * from emp e left JOIN dept d on e.dept_id = d.id -
查询员工姓名,员工领导姓名,自连接
select e1.ename,e2.ename
from emp e1,emp e2
where e1.mgr = e2.id
5.员工姓名,员工部门名称,员工领导姓名,员工领导部门名称
select e1.ename,d1.id,e2.ename,d2.id
from emp e1,emp e2,dept d1,dept d2
where e1.mgr = e2.id
AND e1.dept_id = d1.id
AND e2.dept_id = d2.id
6.员工姓名,员工部门名称,员工领导姓名,员工领导部门名称 员工和领导在同一个部门
select e1.ename,d1.id,e2.ename
from emp e1,emp e2,dept d1
where e1.mgr = e2.id
AND e1.dept_id = d1.id
AND e2.dept_id = e1.dept_id -
子查询
子查询返回一个值
查询出工资和scott一样的员工信息
select * from emp where salary in (select salary from emp where ename=‘小白龙’) -
子查询返回一个集合
查询出工资10号部门任意一个员工一样的员工信息
select * from emp where dept_id in (select id from dept where id=‘30’) -
子查询返回一张表
查询出每个部门最低工资,和最低工资员工的姓名,和该员工所在部门名称 -
先查询每个部门最低工资
select dept_id,min(salary) msal
from emp e GROUP BY dept_id -
.三表联查,获取到最终结果
select e.ename,t.msal,e.dept_id,d.dname
from (select dept_id,min(salary) msal
from emp e GROUP BY dept_id) t,emp e,dept d
where t.msal = e.salary
and t.dept_id = e.dept_id
and t.dept_id = d.id
12. Orcle 分页查询每页5条,显示第二页(重点记忆)
select * from(
select rownum rn,tt.* from(
查询语句···
) tt where rownum < 11
) where rn > 5
- 单列索引,复合索引
create index idx_ename on emp(ename) - 单列索引触发规则,条件必须是索引列中的原始值(单行函数,模糊查询,都会影响索引的触发)
select * from emp where ename=‘小白龙’ - 复合索引
create index idx_enamejob on emp(ename,job) - 复合索引中的第一列为优先检索列,
如果要触发复合索引,必须包含有优先检索列中的原始值
select * from emp where ename=‘小白龙’ and job = ‘xxx’ —触发复合索引
select * from emp where ename=‘小白龙’ or job = ‘xxx’ —不触发索引
select * from emp where ename=‘小白龙’ —触发单列索引
索引参考大佬博客 https://www.cnblogs.com/wwxzdl/p/11116446.html