一、练习素材
创建表
--创建部门表dept
create table dept (
dept1 int ,
dept_name varchar(11));--创建员工表emp
create table emp (
sid int ,
name varchar(11),
age int,
worktime_start date,
incoming int,
dept2 int);
插入数据
--部门表插入数据
insert into dept values
(101,'财务'),
(102,'销售'),
(103,'IT技术'),
(104,'行政');--员工表插入数据
insert into emp values(
1789,'张三',35,'1980/1/1',4000,101),
(1674,'李四',32,'1983/4/1',3500,101),
(1776,'王五',24,'1990/7/1',2000,101),
(1568,'赵六',57,'1970/10/11',7500,102),
(1564,'荣七',64,'1963/10/11',8500,102),
(1879,'牛八',55,'1971/10/20',7300,103);
查询表中数据如下图
二、练习题目
1.找出销售部门中年纪最大的员工的姓名
2.求财务部门最低工资的员工姓名
3.列出每个部门收入总和高于9000的部门名称
4.求工资在7500到8500元之间,年龄最大的人的姓名及部门
5.找出销售部门收入最低的员工入职时间
6.财务部门收入超过2000元的员工姓名
7.列出每个部门的平均收入及部门名称
8.IT技术部入职员工的员工号
9.财务部门的收入总和;
10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表
11.找出哪个部门还没有员工入职;
12.列出部门员工收入大于7000的部门编号,部门名称;
13.列出每一个部门的员工总收入及部门名称;
14.列出每一个部门中年纪最大的员工姓名,部门名称;
15.求李四的收入及部门名称
16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序
17.列出部门员工数大于1个的部门名称
19.查找张三所在的部门名称
参考答案
注:14题和16题我用到的是嵌套查询
--1.找出销售部门中年纪最大的员工的姓名
mysql> select name from dept d join emp e on d.dept1=e.dept2 -> where dept_name='销售'-> order by age desc-> limit 1;--2.求财务部门最低工资的员工姓名
mysql> select name from dept d join emp e on d.dept1=e.dept2-> where dept_name='财务'-> order by incoming asc-> limit 1;--3.列出每个部门收入总和高于9000的部门名称
mysql> select dept_name from dept d join emp e on d.dept1=e.dept2 -> group by dept_name-> having sum(incoming)>9000;--4.求工资在7500到8500元之间,年龄最大的人的姓名及部门
mysql> select name,dept_name from dept d join emp e on d.dept1=e.dept2-> where incoming between 7500 and 8500 -> order by age desc-> limit 1;--5.找出销售部门收入最低的员工入职时间
mysql> select worktime_start from dept d join emp e on d.dept1=e.dept2-> where dept_name='销售'-> order by incoming asc-> limit 1;--6.财务部门收入超过2000元的员工姓名
mysql> select name from dept d join emp e on d.dept1=e.dept2 -> where dept_name='财务' and incoming>2000;--7.列出每个部门的平均收入及部门名称
mysql> select avg(incoming),dept_name from dept d join emp e on d.dept1=e.dept2-> group by dept_name;--8.IT技术部入职员工的员工号
mysql> select sid from dept d join emp e on d.dept1=e.dept2-> where dept_name='IT技术';--9.财务部门的收入总和;
mysql> select sum(incoming) from dept d join emp e on d.dept1=e.dept2-> where dept_name='财务';--10.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表
mysql> select * from dept d join emp e on d.dept1=e.dept2-> order by dept1 asc,worktime_start asc;--11.找出哪个部门还没有员工入职;
mysql> select dept_name from dept d left join emp e on d.dept1=e.dept2-> where name is NULL;--12.列出部门员工收入大于7000的部门编号,部门名称;
mysql> select distinct dept_name,dept1 from dept d join emp e on d.dept1=e.dept2-> where incoming>7000;--13.列出每一个部门的员工总收入及部门名称;
mysql> select sum(incoming),dept_name from dept d join emp e on d.dept1=e.dept2-> group by dept_name;--14.列出每一个部门中年纪最大的员工姓名,部门名称;
mysql> select name,dept_name,age from dept d right join emp e on d.dept1=e.dept2-> where(-> select count(*) from emp e2 -> where e2.age>e.age and dept1=dept2-> )=0;--15.求李四的收入及部门名称
mysql> select incoming,dept_name from dept d join emp e on d.dept1=e.dept2-> where name='李四';--16.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序
mysql> select name,dept_name,incoming from dept d right join emp e on d.dept1=e.dept2-> where (-> select count(*) from emp e2-> where e2.incoming>e.incoming and dept1=dept2-> )=0-> order by incoming desc;--17.列出部门员工数大于1个的部门名称
mysql> select dept_name from dept d join emp e on d.dept1=e.dept2-> group by dept_name-> having count(*)>1;--19.查找张三所在的部门名称
mysql> select dept_name from dept d join emp e on d.dept1=e.dept2-> where name='张三';