数据库练习

新增员工表emp和部门表dept
create table dept (deptl int ,dept name varchar(11)) charset=utf8;create table emp (sid int name varchar(11) age int,worktime start date,incoming int dept2 int)charset=utf8;
insert into dept values
(101,财务')
(102,销售')(103,I技术'),
(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',7500102),(1564,荣七'64,'1963/10/11',8500,102),

(牛八'55,1971/10/20',7300,103);(1879,"钱九'8000,102);(1668,64,"1963/5/4')

(1724,武十"22,2023/5/8'1500,103)

(1770,孙二65,"1986/8/12',9500101);"有-!651986/8/121500,101);(18400,

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

给dept表插入数据

 insert into dept values (101,'财务');
​ insert into dept values (102,'销售');
​ insert into dept values (103,'IT技术');
​ insert into dept values (104,'行政');

给emp表插入数据

insert into emp values(1789,'张三',35,'1980/1/1',4000,101);
insert into emp values(1674,'李四',32,'1983/4/1',3500,101);
insert into emp values(1776,'王五',24,'1990/7/1',2000,101);
insert into emp values(1568,'赵六',57,'1970/10/11',7500,102);
insert into emp values(1564,'荣七',64,'1963/10/11',8500,102);
insert into emp values(1879,'牛八',55,'1971/10/20',7300,103);


1.找出销售部门中年纪最大的员工的姓名

select name from emp where age=(select max(age)from emp);


2.求财务部门最低工资的员工姓名

select name 
from emp 
where incoming=(select min(incoming) from emp 
inner join dept
on emp.dept2=dept.dept1 and dept_name='财务') ;


3.列出每个部门收入总和高于9000的部门名称

SELECT dept.dept_name as 部门名称,sum(emp.incoming) as 总收入 
FROM emp 
INNER JOIN dept 
ON dept.dept1 = emp.dept2 
GROUP BY dept.dept_name HAAVING 总收入 > 9000;


4.求工资在7500到8500元之间,年龄最大的人的姓名及部门

select emp.name,dept.dept_name,emp.age,emp.incoming
from emp 
inner join dept
on emp.dept2=dept.dept1 
where incoming between 7500 and 8500 and age=(select max(age) from emp);


5.找出销售部门收入最低的员工入职时间

select emp.worktime_start 
from emp 
inner join dept 
on emp.dept2=dept.dept1 where incoming=(select min(incoming) from emp);


6.财务部门收入超过2000元的员工姓名

select emp.name from emp 
inner join dept 
on emp.dept2=dept.dept1 where incoming>2000 and dept.dept_name='财务';


7.列出每个部门的平均收入及部门名称

select dept_name,avg(emp.incoming) as 部门平均收入 
from emp innerjoin dept 
on emp.dept2=dept.dept1  group by dept.dept_name;


8.IT技术部入职员工的员工号

select dept.dept_name,emp.sid 
from emp inner 
join dept 
on emp.dept2=dept.dept1  where dept.dept_name='IT技术';


9.财务部门的收入总和:

select dept.dept_name,sum(incoming) as ‘总收入’ 
from emp 
inner join dept 
on emp.dept2=dept.dept1  where dept.dept_name='财务';


10.找出哪个部门还没有员工入职;

select * from emp where worktime_start is null;


11.列出部门员工收入大于7000的部门编号,部门名称;

SELECT emp.dept2,dept.dept_name,incoming FROM emp INNER JOIN dept
ON emp.dept2 = dept.dept1 where incoming>7000;

12.列出每一个部门的员工总收入及部门名称;

SELECT dept.dept_name as '部门名称',sum(incoming) as '部门员工总收入' 
FROM emp 
inner JOIN dept 
ON emp.dept2 = dept.dept1 group by dept.dept_name;

13.列出每一个部门中年纪最大的员工姓名,部门名称;

SELECT dept.dept_name,age 
FROM (SELECT dept2, MAX(age) AS max_age
    FROM emp 
    GROUP BY dept2 )
AS 
max_age_table 
INNER JOIN emp 
ON emp.dept2 = max_age_table.dept2 AND emp.age = max_age_table.max_age 
INNER JOIN dept 
ON emp.dept2 = dept.dept1;


14.求李四的收入及部门名称

SELECT emp.name,incoming,dept.dept_name as '部门名称'  
FROM emp 
INNER JOIN dept 
ON emp.dept2 = dept.dept1 where name='李四';


15.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序

SELECT emp.name,dept.dept_name,emp.incoming 
FROM (SELECT dept2,2, MAX(incoming) 
AS 
max_incoming 
FROM emp     
GROUP BY dept2 )
AS 
max__incoming_table 
INNER JOIN emp 
ON emp.dept2 = max_incoming_table.dept2 ANDD emp.incoming = max_incoming_table.max_incoming INNER JOIN dept 
ON emp.deept2 = dept.dept1 ORDER BY emp.incoming DESC;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值