1. 程式人生 > >為學生運動會比賽資訊建立資料庫表

為學生運動會比賽資訊建立資料庫表

需要儲存的資料如下:

 運動員sporter(運動員編號sporterid,運動員姓名name,運動員性別sex,所屬系號department

專案item(專案編號itemid,專案名稱itemname,專案比賽地點location

成績grade(運動員編號id,專案編號itemid,積分mark

建表要求如下:

1. 每個表都要有主鍵

2. 根據需要自行決定增加哪些約束

3. 成績表要有外來鍵約束

二、給上一步建好的表插入如下資料

運動員(

         1001,李明,男,計算機系

         1002,張三,男,數學系

         1003,李四,男,計算機系

         1004,王二,男,物理系

         1005,李娜,女,心理系

         1006,孫麗,女,數學系)

專案(

         X001,男子五千米,一操場

         X002,男子標槍,一操場

         X003,男子跳遠,二操場

         X004,女子跳高,二操場

         X005,女子三千米,三操場)

積分(

         1001x0016

         1002x0014

         1003x0012

         1004x0010

         1001x0034

         1002x0036

         1004x0032

         1005x0046

         1006x0044

         1003

x0026

         1005x0024

         1006x0022

         1001x0020

--運動員sporter(運動員編號sporterid,運動員姓名name,運動員性別sex,所屬系號department)
create table sporter   
(  
    sporterid varchar2(10)primary key,  
    name varchar2(10) not null,  
    sex varchar2(3),  
    department varchar(20) not null  
);  

--專案item(專案編號itemid,專案名稱itemname,專案比賽地點location)

create table item(  
    itemid varchar2(10) primary key,  
    itemname varchar2(20),  
    location varchar2(20)  
);  

-- 成績grade(運動員編號id,專案編號itemid,積分mark)
create table grade(  
    sporterid varchar2(10) ,   
    itemid varchar2(10),  
    mark number,  
    primary key (sporterid,itemid),  
    foreign key (sporterid) references  sporter(sporterid),  
    foreign key (itemid)  references item(itemid)  
);  

  

-- 2. 往表中插入資料:  
insert into sporter values('1001', '李明','男','計算機系');  
insert into sporter values('1002', '張三','男','數學系');  
insert into sporter values('1003', '李四','男','計算機系');  
insert into sporter values('1004', '王二','男','物理系');  
insert into sporter values('1005', '李娜','女','心理系');  
insert into sporter values('1006', '孫麗','女','數學系');  
select * from SPORTER;  
  
insert into item values('x001', '男子五千米','一操場');  
insert into item values('x002', '男子標槍','一操場');  
insert into item values('x003', '男子跳遠','二操場');  
insert into item values('x004', '女子跳高','二操場');  
insert into item values('x005', '女子三千米','三操場');  
select * from item;  
  
insert into grade values('1001',  'x001', 6);  
insert into grade values('1002',  'x001', 4);  
insert into grade values('1003',  'x001', 2);  
insert into grade values('1004',  'x001', 0);  
insert into grade values('1001',  'x003', 4);  
insert into grade values('1002',  'x003', 6);  
insert into grade values('1004',  'x003', 2);  
insert into grade values('1005',  'x004', 6);  
insert into grade values('1006',  'x004', 4);  
insert into grade values('1003','x002',6);  
insert into grade values( '1005','x002',4);  
insert into grade values('1006','x002',2);  
insert into grade values('1001','x002',0);  
select * from grade;  



--求出目前總積分最高的系名,及其積分。
select *   
from(select department,sum(mark) sum_mark  
  from sporter s 
  join grade g on s.sporterid=g.sporterid  
  group by department  
  order by sum_mark desc) 
where rownum <2


--找出在一操場進行比賽的各專案名稱及其冠軍的姓名。
select i.location,i.itemname,s.name
from grade g,sporter s,item i,(select i.itemid,max(mark) max_mark  
  from item i ,grade g  
  where i.itemid=g.itemid 
        and  i.location='一操場'   
  group by i.itemid) t
where s.sporterid = g.sporterid
      and g.itemid = i.itemid
      and i.itemid = t.itemid
      and g.mark = t.max_mark
 
     
--找出參加了張三所參加的所有專案的其他同學的姓名。
select distinct s.name
from sporter s,item i,grade g,(select i.itemname
    from sporter s,item i,grade g
    where s.name = '張三' and i.itemid = g.itemid and s.sporterid = g.sporterid) t
where i.itemid = g.itemid and s.sporterid = g.sporterid and t.itemname = i.itemname and s.name<>'張三'

      
--經查張三因為使用了違禁藥品,其成績都記0分,請在資料庫中作出相應修改。
update grade g set g.mark=0  
where g.sporterid= (select s.sporterid  from sporter s  where name='張三');  
  
select * from grade  
where g.sporterid= (select s.sporterid  from sporter s  where name='張三');  


--經組委會協商,需要刪除女子調高比賽專案。
delete from grade  g 
where g.itemid=(select itemid  from item  where itemname='女子跳高');

delete from item i where i.itemname='女子跳高';  

select * from item;  


--列出李四參加了那些專案以及獲得了那些積分
select s.name,i.itemname,g.mark
from sporter s,grade g,item i
where s.name = '李四' and s.sporterid = g.sporterid and i.itemid = g.itemid


--列出參與專案最多的同學的名字
select *
from (
select s.name,count(*)
from grade g,sporter s
where s.sporterid = g.sporterid
group by s.name
order by count(*) desc)
where rownum<2


--找出積分最高的同學的名字及他的積分

select *   
from(select s.name,sum(mark) sum_mark  
  from sporter s 
  join grade g on s.sporterid=g.sporterid  
  group by s.name  
  order by sum_mark desc) 
where rownum <4


--列出參與男子標槍的同學的名字和在該專案上的積分,按積分從高到底排序
select s.name,g.mark
from item i,grade g,sporter s
where i.itemid = g.itemid and g.sporterid = s.sporterid and i.itemname = '男子標槍'
order by g.mark desc


--列出每個系的總積分情況,積分由高到底排序
select department,sum(mark) sum_mark  
  from sporter s 
  join grade g on s.sporterid=g.sporterid  
  group by department  
  order by sum_mark desc