您的当前位置:首页正文

数据库实验报告

2024-01-10 来源:好走旅游网


实验3 T-SQL基础

【实验目的】

1、掌握在SQL SERVER 2005下进行数据还原的方法。 2、掌握SQL语句的查询功能和数据更改功能。 【实验内容】

1. 还原factory数据库。

2. 在实验2建立的factory数据库上,完成如下各题。 (1)显示所有职工的年龄,并按职工号递增排序。 (2)求出各部门的党员人数。

(3)显示所有职工的姓名和2004年1月份的工资。 (4)显示所有职工的职工号、姓名和平均工资。

(5)显示所有职工的职工号、姓名、部门名和2004年2月份的工资,并按部门名的顺序排列。

(6)显示各部门名和该部门的所有职工平均工资。

(7)显示所有平均工资高于1200的部门名和对应的平均工资。

(8)显示所有职工的职工号、姓名和部门类型,其中财务部和人事部属于管理部门,市场部属于市场部门。

(9)*若存在职工号为10的职工,则显示其工作部门名称,否则显示相应提示信息。

**求出男女职工的平均工资,(10)若男职工平均工资高出女职工平均工资50%,

则显示“男职工比女职工的工资高多了”的信息;若男职工平均工资与女职工平均工资比率在1.5~0.8之间,则显示“男职工跟女职工的工资差不多”的信息;否则显示“女职工比男职工的工资高多了”的信息。 【实验报告要求】

写出实现各题要求的命令/程序,并列出执行结果。 例如:

(1) 显示所有职工的年龄,并按职工号递增排序。

对应的程序如下:

USE factory GO

SELECT 姓名,YEAR(GETDATE())-YEAR(出生日期) AS '年龄' FROM worker ORDER BY 职工号 GO

执行结果如下:

姓名 年龄

---------- ----------- 孙华 56 陈涛 50 刘欣 56 李涵 43 王小燕 44 李艺 45 魏君 38 孙天奇 43 陈明 63 李华 52 余慧 28 欧阳少兵 37 程西 28 张旗 28 刘夫文 66

操作步骤:

1. 还原数据库如下图

2.(1)显示所有职工的年龄,并按职工号递增排序。

USE factory GO

SELECT 姓名,YEAR(GETDATE())-YEAR(出生日期) AS '年龄'

FROM worker ORDER BY 职工号 GO

2.

(2)求出各部门的党员人数。 SELECT depart.部门名, COUNT(*) AS ‘党员人数’ FROM worker,depart

WHERE worker.党员否=1 AND worker.部门号=depart.部门号 GROUP BY depart.部门号

(3) 显示所有职工的姓名和2004年1月份的工资。 SELECT worker.姓名,salary.工资 FROM worker,salary

WHERE worker.职工号=salary.职工号 AND

YEAR(salary.

)=2004

AND

MONTH(salary.

)=1

(4)显示所有职工的职工号、姓名和平均工资.

SELECT worker.职工号,worker.姓名,AVG(salary.工资) AS’平均工资’ FROM worker,salary

WHERE worker.职工号=salary.职工号 GROUP BY worker.职工号,worker.姓名

(5)显示所有职工的职工号、姓名、部门名和2004年2月份的工资,并按部门名的顺序排列。

SELECT worker.职工号,worker.姓名,depart.部门名, salary. 工资 AS '2004年月工资' FROM worker,depart,salary

WHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号 AND YEAR(salary.日期)=2004

AND MONTH(salary.日期)=2 ORDER BY worker.部门号

(6)显示各部门名和该部门的所有职工平均工资。 SELECT depart.部门名,AVG(salary.工资) AS '平均工资' FROM worker,depart,salary

WHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号 GROUP

BY

depart.

(7)显示所有平均工资高于1200的部门名和对应的平均工资。 SELECT depart.部门名,AVG(salary.工资) AS '平均工资'

FROM worker,depart,salary

WHERE worker.部门号=depart.部门号AND worker.职工号=salary.职工号 GROUP BY depart.部门名 HAVING AVG(salary.工资)>1200

(8)显示所有职工的职工号、姓名和部门类型,其中财务部和人事部属于管理部门,市场部属于市场部门。

SELECT worker.职工号,worker.姓名, CASE depart.部门名

WHEN '财务部'THEN '管理部门' WHEN '人事部'THEN '管理部门' WHEN '市场部'THEN '市场部门' END AS '部门类型' FROM worker,depart

WHERE worker.部门号=depart.部门号

(9)*若存在职工号为10的职工,则显示其工作部门名称,否则显示相应提示信息。

DECLARE @no int,@dep char(10) SET @no=10

IF EXISTS(SELECT * FROM worker WHERE 职工号=@no) BEGIN

SELECT @dep=depart.部门名 FROM worker,depart

WHERE worker.职工号=@no AND worker.部门号=depart.部门号

PRINT '职工号为'+CAST(@no AS CHAR(2))+'的职工在'+ CAST(@dep AS char(6))+'工作'

END ELSE PRINT

'

'

**求出男女职工的平均工资,(10)若男职工平均工资高出女职工平均工资50%,

则显示“男职工比女职工的工资高多了”的信息;若男职工平均工资与女职工平均工资比率在1.5~0.8之间,则显示“男职工跟女职工的工资差不多”的信息;否则显示“女职工比男职工的工资高多了”的信息。DECLARE @avg1 float,@avg2 float,@ratio float

--计算男职工平均工资

SELECT @avg1=AVG(salary.工资) FROM worker,salary

WHERE worker.职工号=salary.职工号 AND worker.性别='男' --计算女职工平均工资

SELECT @avg2=AVG(salary.工资) FROM worker,salary

WHERE worker.职工号=salary.职工号 AND worker.性别='女' SET @ratio=@avg1/@avg2 IF @ratio>1.5

PRINT '男职工比女职工的工资高多了' ELSE

IF @ratio>=0.8

PRINT '男职工跟女职工的工资差不多' ELSE

PRINT '女职工比男职工的工资高多了'

因篇幅问题不能全部显示,请点此查看更多更全内容