目录
4.求工资在7500到8500元之间,年龄最大的人的姓名及部门;
15.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序;
一、创建数据库homework
指令:
create database homework;
演示:
二、选择数据库为homework
指令:
use homework;
select database();
演示:
三、新增员工表emp和部门表dept
指令:
create table dept (dept1 int ,dept_name varchar(11)) charset=utf8;
mysql> create table emp (sid int ,name varchar(11),age int,worktime_start date,incoming int,dept2 int) charset=utf8;
mysql> insert into dept values
-> (101,'财务'),
-> (102,'销售'),
-> (103,'IT技术'),
-> (104,'行政');
mysql> 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),
-> (1668, '钱九', 64, '1963/5/4', 8000, 102),
-> (1724, '武十', 22, '2023/5/8', 1500, 103),
-> (1770, '孙二', 65, '1986/8/12', 9500, 101),
-> (1840, '苟一', 65, '1986/8/12', 1500, 101)
-> ;
演示:
查看:
describe emp ;
describe dept ;
select * from emp;
select * from dept;
四、操作
1.找出销售部门中年纪最大的员工的姓名;
指令:
mysql> select name
-> from emp
-> where age = (select max(age) from emp where dept2 = 102 ) and dept2 = 102;
演示:
2.求财务部门最低工资的员工姓名;
指令:
mysql> select name
-> from emp
-> where incoming = (select min(incoming) from emp where dept2 = 101 ) and dept2 = 101;
演示:
3.列出每个部门收入总和高于9000的部门名称;
指令:
mysql> SELECT dept.dept_name
-> FROM dept
-> JOIN emp ON dept.dept1 = emp.dept2
-> GROUP BY dept.dept1, dept.dept_name
-> having sum(emp.incoming) > 9000;
演示:
4.求工资在7500到8500元之间,年龄最大的人的姓名及部门;
指令:
mysql> select emp.name, dept.dept_name
-> from emp
-> join dept on emp.dept2 = dept.dept1
-> where incoming between 7500 and 8500
-> order by age desc
-> limit 1;
演示:
5.找出销售部门收入最低的员工入职时间;
指令:
mysql> select worktime_start
-> from emp
-> where incoming = (select min(incoming) from emp where dept2 = 102) and dept2 = 10
2;
演示:
6.财务部门收入超过2000元的员工姓名;
指令:
mysql> select name
-> from emp
-> where dept2 = 101 and incoming > 2000;
演示:
7.列出每个部门的平均收入及部门名称;
指令:
mysql> select dept.dept_name, avg(emp.incoming) as average_income
-> from dept
-> join emp on dept.dept1 = emp.dept2
-> group by dept.dept1, dept.dept_name;
演示:
8.IT技术部入职员工的员工号;
指令:
mysql> select sid
-> from emp
-> where dept2 = 103;
演示:
9.财务部门的收入总和;
指令:
mysql> select sum(incoming) as total_income
-> from emp
-> where dept2 = 101;
演示:
10.找出哪个部门还没有员工入职;
指令:
mysql> select dept_name
-> from dept
-> where dept1 not in (select dept2 from emp);
演示:
11.列出部门员工收入大于7000的部门编号,部门名称;
指令:
mysql> select dept.dept1, dept.dept_name
-> from dept
-> join emp on dept.dept1 = emp.dept2
-> where emp.incoming > 7000
-> group by dept.dept1, dept.dept_name;
演示:
12.列出每一个部门的员工总收入及部门名称;
指令:
mysql> select dept.dept_name, sum(emp.incoming) as total_income
-> from dept
-> join emp on dept.dept1 = emp.dept2
-> group by dept.dept1, dept.dept_name;
演示:
13.列出每一个部门中年纪最大的员工姓名,部门名称;
指令:
mysql> select emp.name, dept.dept_name
-> from emp
-> join dept on emp.dept2 = dept.dept1
-> where (emp.age, emp.dept2) in (
-> select max(age), dept2
-> from emp
-> group by dept2, dept.dept_name)
-> ;
演示:
14.求李四的收入及部门名称;
指令:
mysql> select emp.incoming, dept.dept_name
-> from emp
-> join dept on emp.dept2 = dept.dept1
-> where emp.name = '李四';
演示:
15.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序;
指令:
mysql> select emp.name, dept.dept_name, emp.incoming
-> from emp
-> join dept on emp.dept2 = dept.dept1
-> where (emp.incoming, emp.dept2) in (
-> select max(incoming), dept2
-> from emp
-> group by dept2, dept.dept_name)
-> order by emp.incoming desc;
演示: