在某软件公司里,要建立一个数据库来管理员工和项目,其中职员的信息包括员工编号、姓名、性别、生日、祖籍、工资信息,要求员工编号不能重复,姓名必须填写,性别如果不做特别说明默认为男,而且不能填写除‘男’或‘女’之外的其它任何字;项目的信息包括项目编号、项目名称、起始日期、结束日期、预算,要求项目编号从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.  
  2. --(1)   创建用户及表,并创建相应的约束  
  3. create table staff  
  4. (  
  5.   sno number primary key,  
  6.   sname varchar2(10) not null,  
  7.   ssex varchar2(3) default '男' check(ssex='男' or ssex='女') ,  
  8.   sbitthday date,  
  9.   sddr varchar2(20),  
  10.   salary number  
  11. );  
  12.   
  13. create table proj  
  14. (  
  15.   pno number  primary key,  
  16.   pname varchar2(20),  
  17.   sdate date,  
  18.   edate date,  
  19.   buget number  
  20. );  
  21.   
  22. create table sp  
  23. (  
  24.   sno number ,  
  25.   pno number ,  
  26.   primary key (sno,pno),  
  27.   foreign key(sno) references staff(sno),  
  28.   foreign key(pno) references proj(pno)  
  29. );  
  30.   
  31. commit;  
  32. --(2)   使用语句插入以下信息  
  33. insert into staff values(1,'王晓明','女','03-1月-1980','山东青岛',8900);  
  34. insert into staff values(2,'王涵','男','12-6月-1978','广东佛山',7600);  
  35. insert into staff values(3,'李有才','男','23-5月-1978','上海',7800);  
  36. insert into staff values(4,'张小小','女','07-9月-1982','山东济南',4500);  
  37.   
  38. select * from STAFF;  
  39.   
  40. insert into proj values(1001,'小型监控系统','06-8月-2009','01-1月-2010',100000);  
  41. insert into proj values(1002,'办公网络安全','30-12月-2009','30-11月-2009',450000);  
  42. insert into proj values(1003,'电子购物广场','30-11月-2009','31-12月-2009',12000);  
  43.   
  44. select * from proj;  
  45.   
  46. insert into sp values(1,1001);  
  47. insert into sp values(1,1002);  
  48. insert into sp values(1,1003);  
  49. insert into sp values(2,1002);  
  50. insert into sp values(2,1003);  
  51. insert into sp values(3,1002);  
  52. insert into sp values(3,1001);  
  53. insert into sp values(4,1001);  
  54.   
  55. select * from sp;  
  56.   
  57. commit;  
  58. --(3)   使用语句做以下检索  
  59. --a)    查询公司中所有的王姓员工  
  60. select * from STAFF  
  61. where SNAME like '王%';  
  62.   
  63. --b)    查询参与了预算最多的员工有哪些  
  64. select * from  
  65. (select staff.sno,sname,sum(buget)  
  66. from STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno  
  67. group by staff.sno,sname  
  68. order by sum(buget) desc)  
  69. where rownum<2;  
  70.   
  71. --c)    检索一下每个项目有多少员工参与了  
  72. select pno ,count(sno)  
  73. from SP  
  74. group by pno;  
  75.   
  76. --d)    检索李有才的基本信息及其参与的项目信息  
  77. select *   
  78. from  STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno  
  79. where sname='李有才';  
  80.   
  81. --(4)   使用语句修改以下信息  
  82. --a)    将所有员工的祖籍信息前都加上‘中国’二字,比如‘山东青岛’改为‘中国山东青岛’  
  83. update staff set SDDR=concat('中国',sddr);  
  84. select *from staff;  
  85.   
  86. --b)    将参与了‘办公网络安全’项目的职工的工资都加上200元  
  87. update staff set SALARY=salary+200  
  88. where sno in (SELECT sno   
  89.            FROM SP join PROJ on sp.pno=PROJ.pno  
  90.            where pname='办公网络安全' );  
  91.              
  92. select * from staff   
  93. where sno in (SELECT sno   
  94.            FROM SP join PROJ on sp.pno=PROJ.pno  
  95.            where pname='办公网络安全' );         
  96.   
  97. --(5)   使用语句完成以下删除  
  98. --a)    只保留李有才一个人在小型监控系统项目中,其他参与该项目的人不再插手该项目  
  99. DELETE from sp   
  100. where PNO=(select pno from PROJ where pname='小型监控系统')and  
  101.           sno!=(select sno from STAFF where sname='李有才');  
  102.             
  103. select sname,pname  
  104. from STAFF join SP on staff.sno=sp.sno join proj on sp.pno=proj.pno;  
  105.   
  106. --(6)   创建一个名为‘检索信息’的存储过程,该存储过程完成检索指定员工号所参与的项目总数,其中员工号为输入参数,项目总数为输出参数  
  107. create or replace procedure 检索信息 (tsno in number,a out number,b out number)  
  108. as  
  109. begin  
  110. select sno,count(*)  
  111. into a,b  
  112. from sp  
  113. where sno=tsno  
  114. group by sno;  
  115. end 检索信息;  
  116.   
  117. --(7)   调用‘检索信息’存储过程,完成检索1号员工参与的项目总数。  
  118. variable a number;  
  119. variable b number;  
  120. exec 检索信息(1,:a,:b);  
  121. print a b;  

部分截图:


3

(a)

软件公司

(b)

软件公司

(c)

软件公司

(d)

软件公司

4

(a)

软件公司

(b)

软件公司

5

(a)

软件公司

7

软件公司


相关文章: