經典SQL學習筆記 九 比賽資訊資料庫練習

2021-06-29 02:16:14 字數 3818 閱讀 2971

比賽資訊資料庫

題目背景:

有某個****會比賽資訊的資料庫,儲存了如下的表:

運動員sporter表:(運動員編號sporterid,運動員姓名name,運動員性別***,所屬系department)

專案item表(專案編號itemid,專案名稱itemname,loc場地)

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

功能要求:

1、建表

定義各個表的主鍵和外來鍵約束;

運動員的姓名和所屬系別不能為空值

積分要麼為空值,要麼是6,4,2,0,分別代表第一,二,三名和其他名次的積分

create

table sporter(

sporterid integer auto_increment, --運動員編號

name varchar(20) not

null, --運動員姓名

*** char(4), --運動員性別

department varchar(20) not

null, --所屬系

primary

key(sporterid)

)engine=innodb default charset=utf8;

create

table item(

itemid integer auto_increment, --專案編號

itemname varchar(45), --專案名稱

loc varchar(45), --場地

primary

key(itemid)

)engine=innodb default charset=utf8;

create

table grade(

sporterid integer,

itemid integer,

mark integer,

constraint fk_sporter foreign

key (sporterid) references sporter (sporterid),

constraint fk_item foreign

key (itemid) references item (itemid)

)engine=innodb default charset=utf8;

2、插入資料

運動員(

1001,李盼,女,計算機系

1002,王玥,女,數學系

1003,丁賽,男,計算機系

1004,汪麗,女,物理系

1005,李娜,女,心理系

1006,王騁,女,化學系)

專案( x001,男子五千公尺,一操場

x002,男子標槍,一操場

x003,男子跳遠,二操場

x004,女子跳高,二操場

x005,女子三千公尺,三操場)

積分( 1001,x001,6

1002,x001,4

1003,x001,2

1004, x001,0

1001, x003,4

1002, x003,6

1004, x003,2

1004, x004,6

1006, x004,4)

insert

into sporter values

(1001,'李盼','女','計算機系'),

(1002,'王玥','女','數學系'),

(1003,'丁賽','男','計算機系'),

(1004,'汪麗','女','物理系'),

(1005,'李娜','女','心理系'),

(1006,'王騁','女','化學系');

insert

into item values

(001,'男子五千公尺','一操場'),

(002,'男子標槍','一操場'),

(003,'跳遠','二操場'),

(004,'女子跳高','二操場'),

(005,'女子三千公尺','三操場');

insert

into grade values

(1001,001,6),

(1002,001,4),

(1003,001,2),

(1004,001,0),

(1001,003,4),

(1002,003,6),

(1004,003,2),

(1004,004,6),

(1006,004,4);

要求:1.求出總積分最高的系名及總積分

select a.* from

(select department dept, sum(mark) m from sporter s,grade g where s.sporterid = g.sporterid group

by department) a

where a.m = (

select

max(m) from

(select department dept, sum(mark) m from sporter s,grade g where s.sporterid = g.sporterid group

by department) t);

select department dept, sum(mark) m

from sporter s,grade g where s.sporterid = g.sporterid

group

by department

order

by m desc

limit 1;

2.查詢在一操場進行比賽的專案名稱及其冠軍的姓名

select (select itemname from item where itemid=t.itemid) itname, t.max

from (select

max(mark) max,sporterid,itemid from grade where itemid in

(select itemid from item where itemname in

(select itemname from item where loc ='一操場')) group

by itemid) t;

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='王玥'))

);4.經查,王玥因為使用了違禁藥品,其成績都記為0分,請在資料庫中做出相應修改f

update grade set mark=0

where sporterid = (select sporterid from sporter where name = '王玥');

5.經組委會協商,需要刪除女子跳高比賽專案

delete

from grade where itemid = (select itemid from item where itemname='女子跳高');

delete

from item where itemname ='女子跳高';

資料庫 sql 學習筆記

不積跬步,無以至千里 sql 學習筆記 1.select對於null的元素會輸出 2.distinct如果要用,只能放在select後,也就是只對整個要投影的元組起作用,不能只對某個屬性 3.在mysql裡ifnull,sqlserver是isnull 4.經過group分組後,group後面的屬性...

SQL資料庫基礎(九)

變數 sql語言也跟其他程式語言一樣,擁有變數 分支 迴圈等控制語句。在sql語言裡面把變數分為區域性變數和全域性變數,全域性變數又稱系統變數。區域性變數 使用declare關鍵字給變數宣告,語法非常簡單 declare 變數名 變數型別 對變數的賦值可以使用set關鍵字,使用set關鍵字時對變數的...

資料庫學習筆記(SQL語句)

根據已有的表或查詢結果來建立表 create table like會根據原有表建立乙個新錶。該語句會完整的複製原有表的結構以建立乙個新的空表。如果想插入資料,還需要另外的插入語句 如insert into select 但它不能只選原表的某幾列或其他表中的列。create table select可...