阶段综合

 一.建立数据表

      概要:

          

         

表和测试数据:

sqlplus /nolog
conn c##scott/tiger


-- 删除数据表
DROP TABLE grade;
DROP TABLE sporter;
DROP TABLE item;
PURGE RECYCLEBIN;  

--创建表
CREATE TABLE sporter(
      sporterid       NUMBER(4),
      name            VARCHAR2(30)      NOT NULL,
      sex             VARCHAR2(10)      NOT NULL,
      department      VARCHAR2(30)      NOT NULL,
      CONSTRAINT      pk_sporterid  PRIMARY KEY(sporterid),
      CONSTRAINT      ck_sex  CHECK(sex IN ('',''))
);


CREATE TABLE item(
    itemid     VARCHAR2(4),
    itemname   VARCHAR2(30)   NOT NULL,
    location   VARCHAR2(30)   NOT NULL,
    CONSTRAINT pk_itemid  PRIMARY KEY(itemid)
);


CREATE TABLE grade(
     sporterid    NUMBER(4),
     itemid       VARCHAR2(4),
     mark         VARCHAR2(1),
     CONSTRAINT fk_sporterid FOREIGN KEY(sporterid) REFERENCES sporter(sporterid) ON DELETE CASCADE,
     CONSTRAINT fk_itemid  FOREIGN  KEY(itemid)  REFERENCES item(itemid) ON DELETE CASCADE,
     CONSTRAINT ck_mark CHECK(mark IN(6,4,2,0))
);


--测试数据
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1001,'李明','','计算机系');
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1002,'张三','','数学系');
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1003,'李四','','计算机系');
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1004,'王二','','物理系');
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1005,'李娜','','心理系');
INSERT INTO sporter(sporterid,name,sex,department ) VALUES(1006,'孙丽','','数学系');




INSERT INTO item(itemid,itemname,location) VALUES('x001','男子五千米','一操场');
INSERT INTO item(itemid,itemname,location) VALUES('x002','男子标枪','一操场');
INSERT INTO item(itemid,itemname,location) VALUES('x003','男子跳远','二操场');
INSERT INTO item(itemid,itemname,location) VALUES('x004','女子跳高','二操场');
INSERT INTO item(itemid,itemname,location) VALUES('x005','女子三千米','三操场');



INSERT INTO grade(sporterid,itemid,mark) VALUES (1001, 'x001', 6);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1002, 'x001', 4);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1003, 'x001', 2);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1004, 'x001', 0);

INSERT INTO grade(sporterid,itemid,mark) VALUES (1001, 'x003', 4);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1002, 'x003', 6);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1004, 'x003', 2);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1003, 'x003', 0);

INSERT INTO grade(sporterid,itemid,mark) VALUES (1005, 'x004', 6);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1006, 'x004', 4);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1001, 'x004', 2);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1002, 'x004', 0);


INSERT INTO grade(sporterid,itemid,mark) VALUES (1003, 'x002', 6);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1005, 'x002', 4);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1006, 'x002', 2);
INSERT INTO grade(sporterid,itemid,mark) VALUES (1001, 'x002', 0);


--事务提交
COMMIT;
View Code

二. 数据操作

1.求出目前总分最高的系名及其积分。

SELECT s.department,sum(g.mark)
FROM sporter s,grade g
WHERE s.sporterid=g.sporterid
GROUP BY s.department
HAVING SUM(g.mark)=(select max(sum(g.mark)) from sporter s,grade g
                    where s.sporterid=g.sporterid group by s.department);
View Code

                 

2. 找出在 一操场比赛的各项目名称及其冠军的姓名

SELECT i.itemname,s.name
FROM sporter s,item i,grade g,(
    select i.itemid iid,max(g.mark) max from item i,grade g
    where i.itemid=g.itemid and i.location='一操场' group by i.itemid) temp
WHERE s.sporterid=g.sporterid 
AND i.itemid=g.itemid 
AND i.location='一操场'
AND i.itemid=temp.iid
AND g.mark=temp.max;
View Code

              

 3. 找出参加了张三所参加过的项目的其他同学的姓名

SELECT name
FROM sporter
WHERE sporterid IN(
    select sporterid from grade where itemid 
                in(select itemid from grade where sporterid=(
                    select sporterid from sporter where name='张三')))
AND name<>'张三';
View Code

          

4. 经查张三因为使用了违禁药品,其成绩都记0分,请在数据库中作出相应修改

UPDATE grade SET mark=0
WHERE sporterid=(select sporterid from sporter where name='张三');
View Code

5. 经组委会协商,需要删除女子跳高比赛项目

DELETE FROM item WHERE itemname='女子跳高';
View Code
原文地址:https://www.cnblogs.com/zhaochangbo/p/8451303.html