第一部分 SQL语句练习题

1.查询本部门大于平均工资的员工信息

SELECT *
from emp,
(SELECT AVG(sal) avg_sal,deptno
from emp
GROUP BY deptno)a
WHERE emp.sal>a.avg_sal and a.deptno=emp.deptno

第一步:先运用子查询查询出每个部门的平均工资,并把查询结果当成一张表
第二步:通过部门号连接子表和主表,查询出主表中大于子表中平均工资的员工信息

2.找出平均工资最高的部门编号

SELECT AVG(sal) avg_sal
FROM emp
GROUP BY deptno
ORDER BY avg_sal DESC
LIMIT 0,1

3.选择姓名中有字母A和E的员工姓名where ename LIKE '%A%' OR '%E%' 表示的是一定有A,但是E可有可无

SELECT ename FROM emp where ename LIKE '%A%' OR ename LIKE'%E%'

``

4.平均薪水最高的部门编号

select deptno
from
(select avg(sal) avg_sal,deptno from emp group by deptno)
where avg_sal=
(select max(avg_sal) from
(select avg(sal) avg_sal,deptno from emp group by deptno))
//可以写成max(avg(sal))


步骤:先找出每个部门的平均薪水,再找出平均薪水里的最大值,在找出当平均薪水等于最大值时候的部门编号
注:为什么不同时找平均薪水最大值和部门编号呢?因为最大值只有一个,而可能有多个部门具有最高平均薪水

注:如果查询层有聚合函数,最好这一次查询不再查询其它内容,因为聚合函数对应的值可能不止一个,而和聚合函数一起输出的话,另一个查询的值也只能有一个,导致了误差的出现

5.求比普通员工最高工资高的经理人名称

先求普通员工最高工资,再求经理人工资比最高工资高的

SELECT ename,sal
from emp
WHERE empno in (select mgr from emp WHERE mgr is not null) AND sal>
(SELECT max(sal)
from emp
WHERE empno not in
(select mgr from emp WHERE mgr is not null))

你可能感兴趣的:(第一部分 SQL语句练习题)