数据库基础练习
A卷
一、数据库模型
表名:dept 
中文名:部门
字段名 解释 数据类型 主键
deptID 部门编码 Varchar(8) √
deptName 部门名称 Varchar(24)
deptType 部门类别0:销售部门1:技术部门2:管理部门 char(1)
表名:person
中文名:人员
字段名 解释 数据类型 主键
personID 工号 Varchar(8) √
Name 姓名 Varchar(24)
deptID 部门编号 Varchar(8)
Sex 性别0:女1:男 Char(1)
Age 年龄 int
表名:salary
中文名:工资记录(一个月发一次,但是发放的日期不确定)
字段名 解释 数据类型 主键
Pk_salary 流水号 Varchar(8) √
Ddate 发工资日期 Varchar(24)
personID 工号 Varchar(8)
Amount 基本工资 Number(8,2)
Bonus 奖金 Number(8,2)
表名:overtime
中文名:加班记录(一个月可能会有多次)
字段名 解释 数据类型 主键
Pk_overtime 流水号 Varchar(8) √
personID 工号 Varchar(8)
Ddate 加班日期 Varchar(24)
hTime 加班时间(小时) Int
Note 备注 Varchar(100)
二、写SQL语句完成要求
1、按月汇总查询各部门的工资合计,结果要求如下:
月份 部门编码 部门名称 部门合计工资

2、按季度汇总查询各部门的工资合计,结果要求如下:
季度 部门编码 部门名称 部门合计工资

3、按月汇总查询各部门的工资合计占公司总工资的百分比,结果要求如下:
月份 部门编码 部门名称 部门合计工资 占总工资%

4、按月汇总查询各部门类别的工资合计,结果要求如下:
月份 部门类别(销售/技术/管理) 合计工资

5、按月汇总查询各部门类别的工资合计以及站总工资的百分比,结果要求如下:
月份 部门类别(销售/技术/管理) 合计工资 占总工资%

6、按全年男女合计工资与平均工资,结果要求如下:
年 男员工合计工资 男员工平均工资 女员工合计工资 女员工平均工资

7、按月汇总查询各部门最高工资人的工资,结果要求如下:
月份 部门名称 部门最高工资人姓名 工资

8、按月汇总查询各部门工资最高与最低的人的工资,结果要求如下:
月份 部门名称 部门最高工资人姓名 工资 部门最低工资人姓名 工资

9、按月汇总查询各部门的加班费合计,按照10¥/小时计算,结果要求如下:
月份 部门编码 部门名称 合计时间 合计加班费

10、按月汇总查询个人的总工资合计,结果要求如下:
总工资=基本工资+奖金+加班费
加班费按照10¥/小时计算
月份 工号 姓名 基本工资 奖金 加班费 总工资


提示:要考虑有的员工一个月没有加班的情况11、按月汇总查询个人的总工资合计,结果要求如下:
总工资=基本工资+奖金+加班费
加班费按照:
1-10小时/月:10¥/小时
10小时以上/月:15¥/小时
月份 工号 姓名 基本工资 奖金 加班费 总工资


提示:要考虑有的员工一个月没有加班的情况12、将女员工工资上调5%
13、将销售部门女员工工资上调5%
14、将年龄大于等于40岁的员工工资上调5%
15、将年加班时间大于等于100小时的员工工资上调5%
16、将各部门奖金最高的员工工资上调5%
17、将工资低于公司平均工资的员工工资上调5%
18、将工资低于所在部门平均工资的员工工资上调5%
19、删除销售部门与管理部门员工的加班记录
20、将姓‘王’的员工工资上调5%
21、将姓名中含有‘中’字的员工工资上调5%
22、将姓名为2个字的员工工资上调5%23、编写存储过程,完成(3、5、7、8、10-19)的练习
提示:使用临时表24、编写存储过程,完成以下查询: 
月份 销售部门工资 技术部门工资 管理部门工资

25、编写存储过程,完成以下查询: 
月份 销售部门工资 销售部门工资占% 技术部门工资 技术部门工资占% 管理部门工资 管理部门工资占%

26、编写存储过程,完成以下查询: 
月份 年轻人工资 中年人工资 老年人工资


其中:年龄1-30:年轻人,31-50:中年人,50以上:老年人27、编写存储过程,完成以下查询: 
月份 年轻人工资 年轻人工资占% 中年人工资 中年人工资占% 老年人工资 老年人工资占%


其中:年龄1-30:年轻人,31-50:中年人,50以上:老年人28、编写一个触发器,当员工记录删除时,删除他对应的工资记录与加班记录。
提示:考虑一次删除多个员工记录的情况29、编写视图,完成1-5练习。30、编写一个使用oracle序列号的存储过程。

解决方案 »

  1.   

    select t.month 月份,t.deptname 部门,t.name 部门最高工资人姓名姓名,t.mount 工资
    from
    (
    select to_char(c.ddate,'yyyy-mm-dd) month,
    a.deptname,b.name,c.amount,
    rownum() over (partition by to_char(c.ddate,'yyyy-mm-dd), a.deptname order by c.amount desc) rn
    from dept a,person b,salary c
    where a.deptid=b.dept_id
    and b.person=c.person) t
    where t.rn=1
      

  2.   

    有错啊兄弟,在rownum()有错,说为找到要求的from.
      

  3.   

    hebo2005 我从开了贴,请你在看下