建表并且插入数据(粘贴即可)
sql
drop table if exists employee;
create table employee(
id bigint not null auto_increment,
number varchar(20) not null,
name varchar(50),
job varchar(50),
leader_NO varchar(20),
hire_date date,
salary decimal(7,2),
bonus decimal(7,2),
level integer default 0 comment '职位级别,9最高',
department_NO varchar(20),
primary key(id)
);
sql
INSERT INTO employee (id, number, name, job, leader_NO, hire_date, salary, bonus, level, department_NO) VALUES
(1, 'E2018010001', '吴所为', '总经理', NULL, '2018-01-01', 2800.00, 4000.00, 9, 'D2019060001'),
(2, 'E2018070003', '韩金龙', '总经理', NULL, '2018-07-01', 2800.00, 4000.00, 8, 'D2019090001'),
(3, 'E2018060002', '王黎明', '总经理', NULL, '2018-06-01', 2800.00, 4000.00, 8, 'D2019060002'),
(4, 'E2018020002', '龚爱国', '总经理', NULL, '2018-02-01', 2800.00, 4000.00, 8, 'D2020010001'),
(5, 'E2019050001', '马金花', '财务总监', 'E2018010001', '2019-01-01', 3800.00, 500.00, 6, 'D2019060011'),
(6, 'E2019050018', '李昌贵', '财务专员', 'E2019050001', '2019-04-21', 2800.00, 800.00, 4, 'D2019060011'),
(7, 'E2019100011', '王建国', '网络管理员', 'E2018010001', '2019-10-01', 3200.00, NULL, 5, 'D2019060013'),
(8, 'E2019110004', '黎锦熙', '网络管理员', 'E2019100011', '2019-11-01', 3200.00, NULL, 5, 'D2019060013'),
(9, 'E2020020023', '繁茂森', '销售专员', 'E2019060005', '2020-02-01', 2800.00, 0.00, 4, 'D2019060014'),
(10, 'E2019060005', '张善民', '销售经理', 'E2018010001', '2019-06-01', 2800.00, 500.00, 6, 'D2019060014'),
(11, 'E2019060009', '廖云龙', '技术总监', 'E2018010001', '2019-06-01', 4800.00, 2000.00, 7, 'D2019060012'),
(12, 'E2019120021', '刘盛会', '研发工程师', 'E2019060009', '2019-12-11', 4800.00, 500.00, 5, 'D2019060012'),
(13, 'E2019020001', '马明全', '高级工程师', 'E2019060009', '2019-02-01', 4800.00, 1000.00, 6, 'D2019060012'),
(14, 'E2019120015', '李意', '行政专员', 'E2018070003', '2019-12-20', 2800.00, 500.00, 4, 'D2019090001'),
(15, 'E2019020017', '刘六一', '财务总监', 'E2018070003', '2019-02-16', 3800.00, 1000.00, 6, 'D2019090011'),
(16, 'E2020020012', '陈超', '研发工程师', 'E2019060009', '2020-02-18', 4200.00, 500.00, 5, 'D2019060012');
sql
drop table if exists department;
create table department(
id bigint not null auto_increment,
number varchar(20) not null,
name varchar(50),
location varchar(50),
super_NO varchar(20),
primary key(id)
);
sql
insert into department values
(0, 'D2019050001', '清华集团', '北京', null), (0,
'D2019050002', '集团总部', '北京','D2019050001'),
(0, 'D2019060001', '成都中心', '成都', 'D2019050001'), (0,
'D2019060002', '武汉中心', '武汉','D2019050001'),
(0, 'D2019090001', '上海中心', '上海', 'D2019050001'), (0,
'D2020010001', '广州中心', '广州','D2019050001'),
(0, 'D2019090011', '财务部', '上海', 'D2019090001'),(0,
'D2020020012', '行政部', '上海','D2019090001'),
(0, 'D2019060011', '财务部', '成都', 'D2019060001'), (0,
'D2019060012', '技术部', '成都','D2019060001'),
(0, 'D2019060013', '网络部', '成都', 'D2019060001'), (0,
'D2019060014', '市场部', '成都', 'D2019060001');
单表查询练习
- 查询出部门编号为D2019060011的所有员工
sql
select * from employee where department_NO="D2019060011";
- 所有财务总监的姓名、编号和部门编号。
sql
select name,number,department_NO from employee where job="财务总监";
- 找出奖金高于工资的员工。
sql
select * from employee where bonus > salary;
- 找出奖金高于工资40%的员工。
sql
select * from employee where bonus > salary*0.4 ;
5 找出部门编号为D2019090011中所有财务总监,和部门编号为D2019060011中所有财务专员的详细资料。
sql
select * from employee
where(department_NO="D2019060011" and job="财务总监")
or (department_NO="D2019060011" and job="财务专员")
;
- 找出部门编号为D2019090001中所有总经理,部门编号为D2019090011中所有财务总监,还有即不是总经理又不是销售总监但其工资大或等于4000的所有员工详细资料。
sql
select * from employee
where(department_NO="D2019090001" and job="总经理")
or(department_NO="D2019090011" and job="财务总监")
or (job not in("总经理","财务总监") and salary>4000);
7有奖金的工种。
sql
select job from employee where bonus>0;

8无奖金或奖金低于1000的员工。
sql
select * from employee where bonus<1000 or bonus is null;
9. 查询名字由两个字组成的员工。
sql
select * from employee where char_length(name)=2;

10.查询2020年入职的员工。
sql
select * from employee where year(hire_date)="2020";

11. 查询所有员工详细信息,用编号升序排序。
sql
select * from employee order by number ;

12. 查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序。
sql
select * from employee order by salary desc,hire_date ASC;

13. 查询每个部门的平均工资。
sql
select department_NO,avg(salary) from employee group by department_NO;

14. 求出每个部门的雇员数量。
sql
select department_NO,count(*) from employee group by department_NO;

15. 查询每种工作的最高工资、最低工资、人数.
sql
select job,max(salary),min(salary),count(*) from employee group by job;

16. 列出最低薪金大于4000的各种工作及从事此工作的员工人数。
sql
select job,count(*) from employee group by job having min(salary)>4000;

17. 统计各部门工资总和,显示部门编号和该部门雇员的月工资的总和,并且要满足该部门雇员的月工资合计大于6000,输出结果按月工资的合计升序排列。
sql
select department_NO,sum(salary) from employee group by department_NO having sum(salary)>6000 order by sum(salary) ASC;
多表查询练习
1. 列出所有员工的姓名及其直接上级的姓名。
sql
select e1.name "上级姓名",e2.name "员工姓名" from
employee e1,employee e2 where e1.number = e2.leader_NO;

2. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
sql
select e1.hire_date "上级入职日期",e2.hire_date "员工"
入职日期" from employee e1
join employee e2
on e1.number = e2.leader_NO;

3. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
sql
select e2.number,e2.name,d.name from employee e1
join employee e2
on e1.number = e2.leader_NO
join department d
on e2.department_NO = d.number
where e1.hire_date > e2.hire_date;

4. 列出在财务部工作的员工的姓名,假定不知道财务部的部门编号。
sql
select d.name,e.* from employee e
right join department d
on e.department_NO = d.number;

5. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导。
sql
select e2.*,d.name,e1.name from employee e1
join employee e2
on e1.number = e2.leader_NO
join department d
on e2.department_NO = d.number
where e2.salary > (select avg(salary) from employee);

6. 列出与陈超从事相同工作的所有员工及部门名称。
sql
select e.*,d.name from employee e
join department d
on e.department_NO = d.number
where e.job = (select job from employee where name ="陈超");

7. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
sql
select res.department_NO,d.name,d.location,res.count
from (select department_NO,count(*) count from employee
group by department_NO) res
join department d
on res.department_NO = d.number;

8. 列出薪金高于在财务部工作员工平均薪金的员工姓名和薪金、部门名称。
sql
select e.name,e.salary,d.name from employee e
join department d
on e.department_NO = d.number
where e.salary > (select avg(salary) from employee where
department_NO in (select number from department where name =
"财务部"));









