2024年3月19日发(作者:)

第一部分

雇员表:EMPLOYEE

(EMPNO CHARACTER(6) NOT NULL, --雇员编号,定义为主键

FIRSTNME VARCHAR(12) NOT NULL, --雇员第一个名字

MIDINIT CHARACTER(1), --雇员中间名字的首字母

LASTNAME VARCHAR(15) NOT NULL, --雇员最后一个名字

WORKDEPT SMALLINT,

PHONENO CHARACTER(4),

HIREDATE DATE,

JOB CHARACTER(8),

士及以上)

SEX CHARACTER(1),

BIRTHDATE DATE,

SALARY DECIMAL(9, 2),

BONUS DECIMAL(9, 2)

);

--部门编号,外键,对应部门表DEPTNO

--电话号码

--雇用日期

--工作岗位

EDLEVEL SMALLINT NOT NULL, --学历(1:中学及以下,2:大学,3:硕

--性别(1:男,2:女)

--出生日期(60周岁以上为退休)

--薪水

--奖金

部门表:DEPT

(DEPTNO SMALLINT NOT NULL,

DEPTNAME VARCHAR(14),

MANAGER SMALLINT

一个雇员

);

--部门编号,主键

--部门名称

--部门经理编号,每个经理也是雇员表中

1、找出收入(SALARY和BONUS之和)最低的10个EMPNO,按照收入从低到高排序。

DB2:

select empno,salary+bonus from employee order by salary+bonus desc fetch first 10 rows only

2、从雇员表中删除雇用日期在1940年1月1日以前的雇员。

Db2:

Delete from employee where hiredate<’1940-01-01’

3、算出所有雇员的平均收入(SALARY和BONUS之和)、最低收入、最高收入,取整数

位,小数点后面四舍五入。

Db2:

select round(sum(salary+bonus),0),round(min(salary+bonus),0),round(max(salary+bonus),0) from

employee

4、列出所有雇员的全名,全部转换成大写字母,名字每一部分中间用空格隔开。

Db2:

select upper(FIRSTNME||' '||MIDINIT||' '||LASTNAME) from employee

5、找出雇员数大于50的部门的编号。

Db2:

select . deptno,me

from

where in(select workdept

from ee

group by workdept

having count(*)>1)

6、在雇员表JOB字段上新建一个索引,取名idx_emp_job。

Db2:

Create index idx_emp_job on employee(job)

7、找到FIRSTNME=’John’的员工所在部门的名称和部门经理编号。

Db2:

select r,me from where

in(select workdept from ee where

firstname='qq')

8、更新雇员表的薪水,如果为空置为0,如果不为空,不变更字段值。

Db2:

update ee set bonus=0 where bonus is null

9、往部门表新增一个部门,DEPTNO=123,DEPTNAME=’Market’,MANAGER=20。

Db2:

Insert into dept values(123,’Market’,20)

10、列出每个员工的字母缩写,忽略中间的名字,例如,CHRISTINE I HAAS缩写为CH,

BRUCE ADAMSON缩写为BA。

Db2:

select substr (upper(firstname),1,1)||substr(upper(lastname),1,1) from

ee

第二部分