您的位置:首页 > 数据库 > Oracle

软件公司

2018-01-11 17:57 113 查看
在某软件公司里,要建立一个数据库来管理员工和项目,其中职员的信息包括员工编号、姓名、性别、生日、祖籍、工资信息,要求员工编号不能重复,姓名必须填写,性别如果不做特别说明默认为男,而且不能填写除‘男’或‘女’之外的其它任何字;项目的信息包括项目编号、项目名称、起始日期、结束日期、预算,要求项目编号从1001号起每个项目递增1,项目名称不能重复且不可空着。注意:职员是要做项目的!!

(1)      创建用户及表,并创建相应的约束

(2)      使用语句插入以下信息

1号员工王晓明 女  1980-1-3 山东青岛 8900

2号员工王涵 男 1978-6-12 广东佛山 7600

3号员工李有才 男 1978-5-23 上海 7800

4号员工张小小 女 1982-9-7 山东济南 4500

 

项目名称:小型监控系统 起始日期:2009-8-6  结束日期:2010-1-1   预算:100000

项目名称:办公网络安全 起始日期:2009-12-30  结束日期:2010-10-1   预算:450000

项目名称:电子购物广场 起始日期:2009-11-30  结束日期:2009-12-31   预算:12000

 

其中 王晓明三个项目都参加了

        王涵参与了电子购物广场和办公室安全项目

        李有才参与了小型监控系统和办公网络安全项目

        张小小只参与了小型监控系统一个项目

 

(3)      使用语句做以下检索

a)      查询公司中所有的王姓员工

b)     查询参与了预算最多的员工有哪些

c)      检索一下每个项目有多少员工参与了

d)     检索李有才的基本信息及其参与的项目信息

(4)      使用语句修改以下信息

a)      将所有员工的祖籍信息前都加上‘中国’二字,比如‘山东青岛’改为‘中国山东青岛’

b)     将参与了‘办公网络安全’项目的职工的工资都加上200元

(5)      使用语句完成以下删除

a)      只保留李有才一个人在小型监控系统项目中,其他参与该项目的人不再插手该项目

(6)      创建一个名为‘检索信息’的存储过程,该存储过程完成检索指定员工号所参与的项目总数,其中员工号为输入参数,项目总数为输出参数

(7)      调用‘检索信息’存储过程,完成检索1号员工参与的项目总数。

[sql] view
plain copy

 print?

--1.  

--(1)   创建用户及表,并创建相应的约束  

create table staff  

(  

  sno number primary key,  

  sname varchar2(10) not null,  

  ssex varchar2(3) default '男' check(ssex='男' or ssex='女') ,  

  sbitthday date,  

  sddr varchar2(20),  

  salary number  

);  

  

create table proj  

(  

  pno number  primary key,  

  pname varchar2(20),  

  sdate date,  

  edate date,  

  buget number  

);  

  

create table sp  

(  

  sno number ,  

  pno number ,  

  primary key (sno,pno),  

  foreign key(sno) references staff(sno),  

  foreign key(pno) references proj(pno)  

);  

  

commit;  

--(2)   使用语句插入以下信息  

insert into staff values(1,'王晓明','女','03-1月-1980','山东青岛',8900);  

insert into staff values(2,'王涵','男','12-6月-1978','广东佛山',7600);  

insert into staff values(3,'李有才','男','23-5月-1978','上海',7800);  

insert into staff values(4,'张小小','女','07-9月-1982','山东济南',4500);  

  

select * from STAFF;  

  

insert into proj values(1001,'小型监控系统','06-8月-2009','01-1月-2010',100000);  

insert into proj values(1002,'办公网络安全','30-12月-2009','30-11月-2009',450000);  

insert into proj values(1003,'电子购物广场','30-11月-2009','31-12月-2009',12000);  

  

select * from proj;  

  

insert into sp values(1,1001);  

insert into sp values(1,1002);  

insert into sp values(1,1003);  

insert into sp values(2,1002);  

insert into sp values(2,1003);  

insert into sp values(3,1002);  

insert into sp values(3,1001);  

insert into sp values(4,1001);  

  

select * from sp;  

  

commit;  

--(3)   使用语句做以下检索  

--a)    查询公司中所有的王姓员工  

select * from STAFF  

where SNAME like '王%';  

  

--b)    查询参与了预算最多的员工有哪些  

select * from  

(select staff.sno,sname,sum(buget)  

from STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno  

group by staff.sno,sname  

order by sum(buget) desc)  

where rownum<2;  

  

--c)    检索一下每个项目有多少员工参与了  

select pno ,count(sno)  

from SP  

group by pno;  

  

--d)    检索李有才的基本信息及其参与的项目信息  

select *   

from  STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno  

where sname='李有才';  

  

--(4)   使用语句修改以下信息  

--a)    将所有员工的祖籍信息前都加上‘中国’二字,比如‘山东青岛’改为‘中国山东青岛’  

update staff set SDDR=concat('中国',sddr);  

select *from staff;  

  

--b)    将参与了‘办公网络安全’项目的职工的工资都加上200元  

update staff set SALARY=salary+200  

where sno in (SELECT sno   

           FROM SP join PROJ on sp.pno=PROJ.pno  

           where pname='办公网络安全' );  

             

select * from staff   

where sno in (SELECT sno   

           FROM SP join PROJ on sp.pno=PROJ.pno  

           where pname='办公网络安全' );         

  

--(5)   使用语句完成以下删除  

--a)    只保留李有才一个人在小型监控系统项目中,其他参与该项目的人不再插手该项目  

DELETE from sp   

where PNO=(select pno from PROJ where pname='小型监控系统')and  

          sno!=(select sno from STAFF where sname='李有才');  

            

select sname,pname  

from STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno;  

  

--(6)   创建一个名为‘检索信息’的存储过程,该存储过程完成检索指定员工号所参与的项目总数,其中员工号为输入参数,项目总数为输出参数  

create or replace procedure 检索信息 (tsno in number,a out number,b out number)  

as  

begin  

select sno,count(*)  

into a,b  

from sp  

where sno=tsno  

group by sno;  

end 检索信息;  

  

--(7)   调用‘检索信息’存储过程,完成检索1号员工参与的项目总数。  

variable a number;  

variable b number;  

exec 检索信息(1,:a,:b);  

print a b;  

部分截图:

3

(a)



(b)



(c)



(d)



4

(a)



(b)



5

(a)



7

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息