SQL
--1、显示所有职工的年龄
select 姓名 ,2009 -year( 出生日期)
from worker
--2、求出各部门的党员人数
select count(党员否)
from worker
where 党员否='1';
--3、显示所有职工的姓名和2004年一月份工资数
select 姓名,工资
from salary
where year(日期)= 2004 and month(日期)=1
--4、显示所有职工的职工号、姓名和平均工资
select 职工号,姓名,AVG(工资)
from salary
group by 姓名,职工号
--5、显示所有职工的职工号,姓名、部门名和2004年2月份工资,并按部门名顺序排列
select worker.职工号,worker.姓名,depart.部门名,salary.工资
from salary,depart,worker
where
worker.职工号=salary.职工号 and
worker.姓名=salary.姓名 and
depart.部门号=worker.部门号 and
year(日期)= 2004 and month(日期)=2
order by 部门名
--6、显示各部门名和该部门的所有职工平均工资
select worker.职工号,worker.姓名,depart.部门名,AVG(工资)
from salary,depart,worker
where
worker.职工号=salary.职工号 and
worker.姓名=salary.姓名 and
depart.部门号=worker.部门号
group by worker.职工号,worker.姓名,depart.部门名
--7、显示所有平均工资高于1200的部门名和对应的平均工资
select depart.部门名,AVG(工资)
from salary,depart,worker
where
worker.职工号=salary.职工号 and
depart.部门号=worker.部门号
group by 部门名
having AVG(工资)>'1200'
--8、显示所有职工的职工号、姓名和部门类型,其中财务处和人事处属管理部门,市场部属于市场部门
select worker.职工号,worker.姓名,case depart.部门名
when '财务处' then '管理部门'
when '人事处'then'管理部门'
when '市场部'then'市场部门'
end as '部门类型'
from worker,depart
where worker.部门号=depart.部门号
--9、若存在职工号为10的职工,则显示其工作部门名称,否则显示相应的提示信息
if ( select count(*) from worker where 职工号=10)>0
select depart.部门名,worker.职工号
from worker,depart
where
worker.职工号=10 and
worker.部门号=depart.部门号
else
print '不存在'
--12.显示各职工的工资记录和相应的工资小计。
select 工资,count(*)as '工资小计'
from worker,salary,depart
where worker.职工号=salary.职工号
and worker.部门号=depart.部门号
group by 工资
--13.按性别和部门名的所有组合方式列出相应的平均工资。
select depart.部门名,worker.性别 ,avg(工资) as 平均工资
from worker,salary,depart
where worker.职工号=salary.职工号
and worker.部门号=depart.部门号
group by 性别,部门
--14、显示最高工资的职工的职工
号、姓名、部门名、工资发放日期和工资
select a.worker-id,https://www.360docs.net/doc/cd1808502.html,,a.depart,c.depart,b.salary
from worker a ,salary b,depart c
where a. worker-id =b. worker-id and a.depart-id= c.depart-id
order by salary desc
--15.显示最高工资的职工所在的部门名。
Use factory
go
Select b.depart
From salary a,depart b ,worker c
Where salary in (select max(a.salary)from a) and
a.worker-id=c.worker=id and a.depart-id= b. depart-id
--16显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。
Use factory
go
select a.worker-id,https://www.360docs.net/doc/cd1808502.html,
from salary a
where a.salary
Select count(*)
From worker
begin transaction my- transaction
go
INSERT INTO worker VALUES(20,’陈立’,’女’,’55/03/08’,1,’75/10/10’,4)
Go
commIT transaction
Select count(*)
From worker
rollback transaction
Select count(*)
From worker
--22、建立视图View11、查询所有职工的职工号、姓名、部门名和2004年2月份工资,并按部门名顺序排列
CREATE view View1
AS SELECT worker.职工号,worker.姓名,depart.部门名,salary.工资
from worker,depart,salary
where worker.职工号=depart.职工号
and
worker.wno=salary.职工号
and
year(日期)=2004 and month(日期)=2
order by depart.部门名
--23、建立视图View2,查询所有职工的职工号姓名和平均工资
CREATE view View2
AS SELECT worker.职工号,worker.姓名,avg(salary.工资) as '平均工资'
From salary,worker
WHERE worker.职工号=salary.职工号
group by worker.职工号,worker.姓名
--24、建立视图View3,查询各部门名和该部门的所有职工的平均工资
CREATE view View3
AS SELECT depart.部门名,avg(工资) as '平均工资'
From worker,depart,salary
where worker.部门号=depart.部门号 and worker.职工号=salary.职工号
group by depart.部门名
--25.实施worker表的“性别”字段默认值为“男”的约束。
ALTER TABLE worker
ADD constraint 性别 default '男' for 性别
查看表属性性别默认值变成‘男’
--26.实施salary表的“工资”字段值限定在0~9999的约束。
ALTER TABLE salary
ADD CONSTRAINT check_工资 CHECK (工资 between 0 and 9999)
--27.实施depart表的“部门号”字段值唯一的非聚集索引的约束。
ALTER TABLE depart
ADD CONSTRAINT UNIQUE_部门号 UNIQUE (部门号)
--28.为worker表建立外键“部门号”,参考表depart的“部门号”列
ALTER TABLE worker
ADD CONSTRAINT 外键
FOREIGN KEY(部门号) REFERENCES depart(部门号)
--29.建立一个规则sex1:@性别=‘男’OR@性别=‘女’,将其绑定到worker
表的“性别”列上。
CREATE RULE sex as @性别='男'or @性别='女'
GO
SP_BINDRULE 'sex','worker.性别'
--30.删除(25-28)小题所建立的约束。
ALTER TABLE worker
DROP CONSTRAINT 性别
ALTER TABLE salary
DROP CONSTRAINT check_工资
ALTER TABLE depart
DROP CONSTRAINT UNIQUE_部门号
ALTER TABLE worker
DROP CONSTRAINT 外键
--31.解除(29)小题所建立的绑定并删除规则sex1。
--建立绑定:
EXEC SP_UNBINDRULE 'worker.性别'
--删除规则:
drop rule sex1
--32 创建一个为worker表添加职工记录的存储过程Addworker
-- '王非','女','55/03/08','女','75/10/10',2
INSERT INTO worker VALUES(16,'王非','女','55/03/08',1,'75/10/10',4)
--33 创建一个存储过程Delworker删除worker表中指定职工号=20的记录。
create procedure dakwoeker
as
select 职工记录
from worker
where
Delete from worker
Where worker-id=20 and name='王非'
--34 显示存储过程 Delworker
exec dakworker
--35删除存储过程Addworker和Delworker
drop procedure addwoeker
drop procedure dakwoeker