日期:2014-05-17  浏览次数:20518 次

在线等一道SQL数据库的题
现有一个公司的部门及雇员的数据库,由下面三个表组成: 
雇员(雇员号,姓名,年龄,地址,薪水) 
部门(部门号,部门名,部门经理) 
工作(雇员号,部门号,在该部门工作的年限) 


用SQL语句完成下列查询 
⑴求同时在三个部门工作的雇员和姓名 
⑵列出各部门的职工的工资总额,并按照总额大小降序排列 
⑶求和其部门经理住址相同的员工的姓名及经理姓名 
④为财务部门的雇员加薪,5年以下加5%,5年以上加3% 
⑤删除部门工作年限为0的工作记录,若删除后有雇员没有任何部门工作,删除其雇员记录 

------解决方案--------------------
--额,。。。
select t.雇员号,t.姓名
from (
  select 雇员号,雇员.姓名,部门号
  from 工作 left join 雇员 on 工作.雇员号 = 雇员.雇员号
  group by 雇员号,雇员.姓名,部门号
) as t
group by t.雇员号,t.姓名
having count(*) = 3
------解决方案--------------------

1.
select a.姓名 from 雇员 a inner join 工作 b on a.雇员号=b.雇员号 group by a.姓名 having count(*)=3
2.
select a.部门名,sum(c.薪水) from 部门 a inner join 工作 b on a.部门号=b.部门号 inner join 雇员 c on b.雇员号=c.雇员号 group by a.部门名
3.
select c.姓名,a.部门经理 from 部门 a inner join 工作 b on a.部门号=b.部门号 inner join 雇员 c on b.雇员号=c.雇员号 inner join 雇员 d on a.部门经理=d.姓名
where d.地址=c.地址
4.
update a set 薪水=(case when b.在该部门工作的年限<=5 then a.薪水*1.05 else a.薪水*1.03 end)
from 雇员 a inner join 工作 b on a.雇员号=b.雇员号
5.
delete from 工作 where 在该部门工作的年限=0
delete a from 雇员 a where not exists(select 1 from 工作 where 雇员号=a.雇员号)