MySQL面试题(二)

时间:2022-06-26
本文章向大家介绍MySQL面试题(二),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
--
-- 转存表中的数据 `dept`
--
INSERT INTO `dept` (`deptno`, `dname`) VALUES
('1', '事业部'),
('2', '销售部'),
('3', '技术部');

--
-- 转存表中的数据 `emp`
--

INSERT INTO `emp` (`empno`, `ename`, `job`, `mgr`, `sal`, `deptno`) VALUES
('01', 'jacky', 'clerk', 'tom', '1000', '1'),
('02', 'tom', 'clerk', 'tom', '2000', '1'),
('03', 'jenny', 'sales', 'pretty', '1000', '2'),
('04', 'pretty', 'sales', '', '800', '2'),
('05', 'buddy', 'jishu', 'canndy', '1000', '3'),
('06', 'canddy', 'jishu', '', '1000', '3'),
('07', 'biddy', 'clerk', 'tom', '2000', '1');

-- 8.查询emp中员工有管理者的员工姓名、管理者的信息

insert into emp values ('01','jacky','clerk','tom','1000','1');
+--------------+-----------+
| 员工名称     | 管理员    |
+--------------+-----------+
| tom          | jacky     |
| tom          | tom       |
| pretty       | jenny     |
|              | pretty    |
| canndy       | buddy     |
|              | canddy    |
| tom          | biddy     |
+--------------+-----------+
7 rows in set (0.00 sec)

-- 9.查询出emp表中,部门名称、部门编号并且工作内容为clerk的员工名称和员工岗位.

select b.dname as '部门名称',b.deptno as '部门编号',a.ename as '员工名称',
a.job as '工作岗位' from emp a  inner join dept b  on a.deptno = b.deptno
and  a.job='clerk';
+--------------+--------------+--------------+--------------+
| 部门名称     | 部门编号     | 员工名称     | 工作岗位     |
+--------------+--------------+--------------+--------------+
| 事业部       | 1            | jacky        | clerk        |
| 事业部       | 1            | tom          | clerk        |
| 事业部       | 1            | biddy        | clerk        |
+--------------+--------------+--------------+--------------+
3 rows in set (0.00 sec)

-- 10.查询本部门中,高于平均薪资的员工的员工编号、员工名称、部门名称、员工工资

select a.deptno as '部门编号',b.dname as '部门名称',a.ename as '员工姓名',
a.sal as '员工工资' from emp a inner join dept b on a.deptno = b.deptno 
where a.sal>(select avg(sal) as sal from emp)  order by a.deptno;
+--------------+--------------+--------------+--------------+
| 部门编号     | 部门名称     | 员工姓名     | 员工工资     |
+--------------+--------------+--------------+--------------+
| 1            | 事业部       | tom          | 2000         |
| 1            | 事业部       | biddy        | 2000         |
+--------------+--------------+--------------+--------------+
2 rows in set (0.01 sec)

-- 11.对于emp中工资高于本部门平均水平,人数多余1人的,列出部门号,人数,平均工资,按部门号排序.

select count(a.empno) as '员工数量',a.deptno as '部门编号',avg(sal) as '平均工资' 
from emp as a where(select count(c.empno) from emp as c where c.deptno=a.deptno 
and c.sal>(select avg(sal) from emp as b where c.deptno=b.deptno))>1 group by 
a.deptno order by a.deptno;  
+--------------+--------------+--------------------+
| 员工数量     | 部门编号     | 平均工资           |
+--------------+--------------+--------------------+
|            3 | 1            | 1666.6666666666667 |
+--------------+--------------+--------------------+
1 row in set (0.00 sec)

-- 12.查询工资高于本部门平均水平的员工,列出部门号,姓名,工资,按部门号排序

select b.deptno as '部门号',c.dname as '部门名称', b.ename as '姓名', 
b.sal as '工资' from emp as b inner join dept as c on c.deptno = b.deptno  
where b.sal>(select avg(a.sal) from emp as a where a.deptno = b.deptno) order by b.deptno;
+-----------+--------------+--------+--------+
| 部门号    | 部门名称     | 姓名   | 工资   |
+-----------+--------------+--------+--------+
| 1         | 事业部       | tom    | 2000   |
| 1         | 事业部       | biddy  | 2000   |
| 2         | 销售部       | jenny  | 1000   |
+-----------+--------------+--------+--------+
3 rows in set (0.00 sec)

-- 13.查询出各个部门中工资高于本部门平均工资的员工数和部门号,按照部门号进行排序.

select a.deptno as '部门号',count(a.sal) as '员工数' 
from emp as a where a.sal>(select avg(b.sal) from emp as b 
where a.deptno=b.deptno) group by a.deptno order by a.deptno;
+-----------+-----------+
| 部门号    | 员工数    |
+-----------+-----------+
| 1         |         2 |
| 2         |         1 |
+-----------+-----------+
2 rows in set (0.00 sec)

--14. 查询出工资低于自己工资至少5人员工,罗列出部门号、姓名和工资以及工资少于自己的人数.

select a.deptno as '部门号',a.ename as '姓名',a.sal as '工资',
(select count(b.ename) from emp as b where b.sal<a.sal) as '人数' 
from emp as a where (select count(b.ename) from emp as b where b.sal<a.sal)>=5;
+-----------+--------+--------+--------+
| 部门号    | 姓名   | 工资   | 人数   |
+-----------+--------+--------+--------+
| 2         | pretty | 800    |      6 |
+-----------+--------+--------+--------+
1 row in set (0.00 sec)