建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表:

运动员sporter(运动员编号sporterid,运动员姓名sportername,运动员性别sex,所属系号department)

项目item(项目编号itemid,项目名称itemname,项目比赛地点location)

成绩grade(运动员编号id,项目编号itemid,积分mark)

请用SQL语句完成如下功能:

1.建表,并在相应字段上增加约束

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

1005,x004,6

1006,x004,4

1003,x002,6

1005,x002,4

1006,x002,2

1001,x002,0

完成如下的查询要求:

|-求出目前总积分最高的系名,及其积分

|-找出一操场进行比赛的各项目名称及其冠军的姓名

|-找出参加了张三所参加的所有项目的其他同学的姓名

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

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

--删除数据表

drop table sporter purge;

drop table item purge;

drop table grade purge;

--创建数据表

create table sporter(

sporterid number(4),

name varchar2(20) not null,

sex varchar2(20),

department varchar2(20),

constraint pk_sporterid primary key (sporterid)

);

create table item(

itemid varchar2(4),

itemname varchar2(20) not null,

location varchar2(20) not null,

constraint pk_itemid primary key (itemid)

);

create table grade(

sporterid number(4),

itemid varchar2(4),

mark number(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

);

--增加测试数据--运动员

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(1005,‘x004‘,6);

insert into grade(sporterid,itemid,mark)values(1006,‘x004‘,4);

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;

数据操作

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

    确定要使用的数据表:

|-grade表:统计出总积分

|-sporter表:系名称

确定已知的关联字段:

|-运动员和成绩:sporter.sporterid=grade.sporterid

第一步:换一个查询方式,查询出每个系的名称和所取得的各个成绩

select s.department,g.mark

from sporter s,grade g

where s.sporterid=g.sporterid;

第二步:以上的查询存在有重复数据,所以可以直接分组,使用sum()函数统计总成绩。

select s.department,sum(g.mark)

from sporter s,grade g

where s.sporterid=g.sporterid

group by s.department;

第三步:要想求出最高的成绩,那么久需要统计函数嵌套,而统计函数嵌套之后不允许出现任何的字段,包括分组字段。

select max(sum(g.mark))

from sporter s,grade g

where s.sporterid=g.sporterid

group by s.department;

第四步:将第二步的返回结果进行分组后过滤,用第三步的结果进行过滤

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

);

找出在一操场进行比赛的各项目名称及其冠军的姓名 确定要使用的数据表    |-item表:项目名称    |-sporter表:姓名    |-grade表:成绩

确定已知的关联字段

|-项目和成绩:item.itemid=grade.itemid;

|-运动员和成绩:sporter.sporterid=grade.sporterid

第一步:找出所有一操场所有举办项目的编号,因为只有通过编号才能找到成绩

select itemid

from item

where location=‘一操场‘;

第二步:找到在此标号之中举办的项目的冠军成绩

select itemid,max(mark)

from grade

where itemid in(

select itemid

from item

where location=‘一操场‘)

group by itemid;

第三步:找到符合此成绩的运动员数据

select g.sporterid

from grade g,(

select itemid iid,max(mark) max

from grade

where itemid in(

select itemid

from item

where location =‘一操场‘)

group by itemid) temp

where g.itemid=temp.iid and g.mark=temp.max;

第四步:增加项目信息和运动员信息

select g.sporterid,s.name,g.mark,i.itemname

from grade g,(

select itemid iid,max(mark) max

from grade

where itemid in(

select itemid

from item

where location =‘一操场‘)

group by itemid) temp,item i,sporter s

where g.itemid=temp.iid and g.mark=temp.max

and temp.iid=i.itemid and s.sporterid=g.sporterid;

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

确定要使用的数据表

|-sporter表:运动员姓名

|-grade表:项目编号

第一步:找到张三的运动员编号

select sporterid

from sporter where name=‘张三‘;

第二步:张三所有参加的项目都在grade表中

select itemid

from grade

where grade.sporterid=(

select sporterid

from sporter

where name=‘张三‘

);

第三步:根据此项目编号找到运动员编号

select sporterid

from grade

where itemid in(

select itemid

from grade

where grade.sporterid=(

select sporterid

from sporter

where name=‘张三‘));

第四步:根据运动员编号查找运动员信息

select *

from sporter

where sporterid in(

select sporterid

from grade

where itemid in(

select itemid

from grade

where grade.sporterid=(

select sporterid

from sporter

where name=‘张三‘)))

and name !=‘张三‘;

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

update grade set mark=0

where sporterid =(

select sporterid

from sporter

where name=‘张三‘

);

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

delete from item where itemname=‘女子跳高‘;

时间: 2024-10-13 02:47:14

建表、更新、查询综合练习的相关文章

mysql 建表和查询 大全 (待补全)

#新建学生表 drop table if exists student; create table student( sno varchar(20) not null primary key comment '学号', sname varchar(20) not null comment '学生姓名', ssex varchar(20) not null comment '学生性别', sbirthday Datetime comment '学生出生年月', class varchar(20)

MySQL - 建库、建表、查询

本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程.mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果.mysql可以用于批模式:你预先把查询放在一个文件中,然后告诉mysql执行文件的内容.使用mysql的两个方法都在这里涉及. 为了看清由mysql提供的一个选择项目表了,用--help选项调用它: shell> mysql --help 本章假定mysql已经被安装在你的机器上,并

SQL 建表与查询 HTML计算时间差

create database xue1 go --创建数据库 use xue1 go --引用数据库 create table xinxi ( code int, name varchar(20), xuehao decimal(10), brithday decimal(10), ) --创建信息表 insert into xinxi values(1,'张三',2016042701,2016-4-27) insert into xinxi values(2,'李四',2016042702,

Mysql 建表与查询

-- ID:新闻的唯一标示-- tiltle:新闻的标题-- content:新闻的内容-- created_at:新闻添加的时间-- types:新闻的类型-- image:新闻的缩略图-- author:作者-- view_count:浏览量-- is_valid:删除标记CREATE TABLE `news` ( `id` INT NOT NULL AUTO_INCREMENT, `title` VARCHAR (200) NOT NULL, `content` VARCHAR (2000

记账程序注意凭证记账与更新自建表同事提交

** 完成后先不提交 或者 回滚,记录下消息, CALL FUCNTION 'BAPI_ACC_DOCUMENT_POST' ** 继续自建表更新逻辑: UPDATE zfit640_s SET status1 = gs_zfit640_s-status1 bukrs1 = gs_zfit640_s-bukrs1 belnr1 = gs_zfit640_s-belnr1 budat1 = gs_zfit640_s-budat1 message1 = gs_zfit640_s-message1 z

Oracle基础知识笔记(11) 建表、更新、查询综合练习

有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓名和所属系别不能为空: 积分要第为空值,要么为6,4

Oracle笔记(十一) 建表、更新、查询综合练习

Oracle笔记(十一) 建表.更新.查询综合练习 有某个学生运动会比赛信息的数据库,保存了如下的表: 运动员sporter(运动员编号sporterid,运动员姓名name,运动员性别sex,所属系号department) 项目item(项目编号itemid,项目名称itemname,项目比赛地点location) 成绩grade(运动员编号id,项目编号itemid,积分mark) 请用SQL语句完成如下功能: 1.  建表,并在相应字段上增加约束: 定义各个表的主键和外键约束: 运动员的姓

Sqlite嵌入式数据库的安装、建库、建表、更新表结构以及数据导入导出等等详细过程记录

简介: SQLite 是实现了SQL 92标准的一个大子集的嵌入式数据库.其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中而著名.我觉得SQLite的功能一定程度上居于MySQL 和PostgreSQL之间.尽管如此,在性能上面,SQLite常常快2-3倍 (甚至更多).这利益于其高度调整了的内部架构,因为它除去了服务器端到客户端和客户端到服务器端的通信. 而令人印象深刻的特点是你可将你的整个数据库系统放在其中.利用非常高效的内存组织,SQLite只需在很小的内存中维护其很小的

Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tests.jar以及Hbase资源包中lib目录下的所有jar包 2.主要程序 Java代码 package com.wujintao.hbase.test; import java.io.IOException; import java.util.ArrayList; import java.util