1.部门平均薪水的等级(两张表关联)
select deptno ,avg_sal ,grade from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal );
2.求部门哪些人的薪水最高
select ename,sal from emp
join (select max(sal) max_sal ,deptno from emp group by deptno ) t
on (emp.sal = t.max_sal and emp.deptno = t.deptno);
3.求部门平均的薪水等级
select deptno,avg(grade) from
(
select deptno,ename,grade from emp join salgrde s on (emp.sal between s.losal and s.hisal )
) t
group by deptno ;
4 雇员中哪些人是经理人
select ename from emp where empno in
(
select distinct mgr from emp
)
5 不准用组函数,求薪水的最高值(面试题)
思路:两张表是同一张表,都有薪水字段,设置链接条件 先查出 有比自己大的 数据链接 不在里面的即为最大值,因为最大值没有比自己大的
select distinct sal from emp where sal not in
(
select e1.sal from emp e1 join emp e2 on (e1.sal <e2.sal )
)
6.求平均薪水最高的部门的部门编号
select deptno,avg_sal from (select avg(sal) avg_sal ,deptno from emp group by deptno)
select max(avg_sal) from
(
select avg(sal) avg_sal ,deptno from emp group by deptno
)
7 求平均薪水最高的部门的部门名称
思路 查询部门名称 从部门表中 条件 部门编号= 平均薪水最高的部门的部门编号(上题结果中含有)
select dname from dept where deptno=
(
select deptno from (select avg(sal) avg_sal ,deptno from emp group by deptno)
select max(avg_sal) from
(
select avg(sal) avg_sal ,deptno from emp group by deptno
)
)
8 求平均薪水的等级最低的部门名称(待续)
面试题比较效率
select * from emp where deptno = 10 and ename like ' %A%';
select * from emp where ename like ' %A%' and deptno = 10 ;
上面的好,先执行相当于索引 在局部扫描 ,而第二个 会全局扫描 再两次筛选;