mysql代码小练-2

建表并且插入数据(粘贴即可)

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');

单表查询练习

  1. 查询出部门编号为D2019060011的所有员工
sql 复制代码
 select * from employee where department_NO="D2019060011";

  1. 所有财务总监的姓名、编号和部门编号。
sql 复制代码
select name,number,department_NO from employee where job="财务总监";

  1. 找出奖金高于工资的员工。
sql 复制代码
 select * from employee where bonus > salary;

  1. 找出奖金高于工资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="财务专员")
    ;

  1. 找出部门编号为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 =
     "财务部"));
相关推荐
科技小花2 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56613 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
虹科网络安全4 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717214 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
绘梨衣5475 小时前
Docker+FastAPI+MySQL 项目部署报错汇总
mysql·docker·fastapi
小江的记录本5 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
dvjr cloi5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
dFObBIMmai5 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw05 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
czlczl200209256 小时前
利用“延迟关联”优化 MySQL 巨量数据的深分页查询
数据库·mysql