运动会比赛信息的数据库: 运动员y:(运动员编号ynum,运动员姓名yname,运动员性别ysex,所属系名ydep) 项目x:(项目编号xnum,项目名称xname,项目比赛地点xplace) 成绩c:(运动员编号ynum,项目编号xnum,积分score) ------------------------------------------------------------------------------------ 1.求出目前总积分最高的系名,及其积分.select ydep,score from y,x,c where y.ynum=c.ynum and x.xnum=c.xnum group by ydep having sum(score)>=all ( select sum(score) from y,x,c where y.ynum=c.ynum and x.xnum=c.xnum group by ydep ) 2.找出在1操场进行比赛的各项目名称及其冠军的姓名 select xname,yname from y,x,c where y.ynum=c.ynum and x.xnum=c.xnum and score= ( select max(score) from y,x,c where y.ynum=c.ynum and x.xnum=c.xnum group by xname ) group by xname3.找出参加了张三所参加的所有项目的其他同学的姓名 select xname,yname from y,x,c where y.ynum=c.ynum and x.xnum=c.xnum and xum in ( select xnum from y,c where c.ynum=y.ynum and y.name='张三' ) and xname!='张三'------------------------------------------------------------------- 我就根据自己的水平这样写了这三个问题,大家能不能帮忙纠错,这对于我很重要,一通百通! 请使用像我一样稚嫩的语句纠正, 尽量是在我的基础上纠正问题, 如果实在错的一塌糊涂, 就写一段完整的如此稚嫩的语句让我学习一下思想,非常感谢! 帮忙的幸福一生....
select ydep,sum(grade)as 总成绩 from 成绩,运动员 where 成绩.ynum=运动员.ynum group by ydep having sum(grade)>=all ( select sum(grade) from 成绩,运动员 where 成绩.ynum=运动员.ynum group by ydep )select xname,yname from 成绩,运动员,项目 where 成绩.ynum=运动员.ynum and 成绩.xnum=项目.xnum and grade >= all ( select grade from 成绩,项目 where 成绩.xnum=项目.xnum and xplace ='1操场' )select * from 运动员,成绩 where 运动员.ynum=成绩.ynum and xnum in ( select xnum from 运动员,成绩 where 运动员.ynum=成绩.ynum and yname='张三' ) and yname <>'张三' 就是这样了 有些细节你应该检查一下 比如xnum 你写成xum != 一般写成<>等等细节上
select xname,yname from 成绩,运动员,项目 where 成绩.ynum=运动员.ynum and 成绩.xnum=项目.xnum and grade >= all ( select grade from 成绩,项目 where 成绩.xnum=项目.xnum and xplace ='1操场' )这个grade>=all() 对不对,我理解不了. 分数大于所有在操场1的分数,不同的项目也要比么。
2、经常使用sql语句,反复测试,需要经历很长一个过程
3、基本掌握了sql的一点点原理
运动员y:(运动员编号ynum,运动员姓名yname,运动员性别ysex,所属系名ydep)
项目x:(项目编号xnum,项目名称xname,项目比赛地点xplace)
成绩c:(运动员编号ynum,项目编号xnum,积分score)
------------------------------------------------------------------------------------
1.求出目前总积分最高的系名,及其积分.select ydep,score
from y,x,c
where y.ynum=c.ynum and x.xnum=c.xnum
group by ydep
having sum(score)>=all
(
select sum(score)
from y,x,c
where y.ynum=c.ynum and x.xnum=c.xnum
group by ydep
) 2.找出在1操场进行比赛的各项目名称及其冠军的姓名
select xname,yname
from y,x,c
where y.ynum=c.ynum and x.xnum=c.xnum and score=
(
select max(score)
from y,x,c
where y.ynum=c.ynum and x.xnum=c.xnum
group by xname
)
group by xname3.找出参加了张三所参加的所有项目的其他同学的姓名
select xname,yname
from y,x,c
where y.ynum=c.ynum and x.xnum=c.xnum and xum in
(
select xnum
from y,c
where c.ynum=y.ynum and y.name='张三'
) and xname!='张三'-------------------------------------------------------------------
我就根据自己的水平这样写了这三个问题,大家能不能帮忙纠错,这对于我很重要,一通百通!
请使用像我一样稚嫩的语句纠正, 尽量是在我的基础上纠正问题, 如果实在错的一塌糊涂,
就写一段完整的如此稚嫩的语句让我学习一下思想,非常感谢! 帮忙的幸福一生....
from 成绩,运动员
where 成绩.ynum=运动员.ynum
group by ydep
having sum(grade)>=all
(
select sum(grade)
from 成绩,运动员
where 成绩.ynum=运动员.ynum
group by ydep
)select xname,yname
from 成绩,运动员,项目
where 成绩.ynum=运动员.ynum and 成绩.xnum=项目.xnum and grade >= all
(
select grade
from 成绩,项目
where 成绩.xnum=项目.xnum and xplace ='1操场'
)select *
from 运动员,成绩
where 运动员.ynum=成绩.ynum and xnum in
(
select xnum
from 运动员,成绩
where 运动员.ynum=成绩.ynum and yname='张三'
)
and yname <>'张三'
就是这样了 有些细节你应该检查一下 比如xnum 你写成xum
!= 一般写成<>等等细节上
from 成绩,运动员,项目
where 成绩.ynum=运动员.ynum and 成绩.xnum=项目.xnum and grade >= all
(
select grade
from 成绩,项目
where 成绩.xnum=项目.xnum and xplace ='1操场'
)这个grade>=all() 对不对,我理解不了. 分数大于所有在操场1的分数,不同的项目也要比么。