第一部分 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))

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 2,028评论 0赞 4
  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,593评论 0赞 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 2,080评论 0赞 2
  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,548评论 0赞 2
  • 给大家讲一个故事:话说在一列被封在暴风雪中的火车上发生了杀人事件,死者身中12刀,因为大雪封山,凶手就藏在火车当中...
    王二宝阅读 691评论 1赞 4

友情链接更多精彩内容