数据库,急求答案,完整 120

①学生关系:Student(Sno,Sname,Ssex,Sage,Sdept),属性Sno,Sname,Ssex,Sage和Sdept分别表示学号、姓名、性别、年龄和所... ①学生关系:Student(Sno,Sname,Ssex,Sage,Sdept),属性Sno,Sname,Ssex,Sage和Sdept分别表示学号、姓名、性别、年龄和所在系,Sno为主码;②课程关系:Cource(Cno,Cname,Cpno,Ccredit),属性Cno,Cname,Cpno和Ccredit分别表示课程号课程名、先修课程号和学分,Cno为主码;
③学生选课关系:SC(Sno,Cno,Grade),属性Sno,Cno,Grade分别表示学号、课程号和成绩,主码为属性组(Sno,Cno)。
(1)用SQL语言实现下列查询
①检索年龄在18到20之间(包括18和20)的女生的学号、姓名和年龄;
②检索每个学生的学号、姓名、选修的课程及成绩;
③检索英语课的最高成绩和最低成绩;
④查询至少选修了学号为2000014的学生所选修的全部课程的学生姓名及所在系。
(2)用关系代数实现下列查询
①查询选修课程名为管理学的学生的学号和姓名
②查询至少选修课程号为1024和1136的学生的学号
③查询没有学课程号为1156课程的学生姓名和所在系
④查询所学课程包含学生王林所学课程的学生的姓名
SQL
展开
 我来答
nietiezheng
2013-12-19 · TA获得超过5536个赞
知道大有可为答主
回答量:3132
采纳率:87%
帮助的人:1219万
展开全部

本来想给977657205一个赞的,但是发现里面有的语句有错误,所以这里更正一下(977657205同学也很不容易的)。后面的要求关系代数

1.1没什么问题,下面是另一种实现方式,作为试题可能是考察的这个

select Sno,Sname,Sage from Student where Sage between 18 and 20;

1.2 977657205是一种比较严谨的答案,另一种简单的就是三个表简单连接,但没有考虑有没选过课的学生问题,977657205的答案想考虑这类问题,但写的不对,应该和SC连接的时候就用left outer join

 select s.Sno,s.Sname,c.Cname,SC.Grade

from Student s , SC , Cource c

where  SC.Sno=s.Sno and SC.Cno=c.Cno;

1.3 一个简单的写法如下

select max(Grade),min(Grade) from SC, Cource C where SC.Cno=C.Cno and Cname='英语'

1.4 这个是导致我回这个问题的主要原因,很多人都是错在这个问题上了。对于全称量词,sql没有语句实现,因此要转为双重否定,这样的语义就是:找出没有哪门课学号为2000014的学生学修了,而该生没有选修的学生,因此语句要有not exists,不是not in

select Sname,Sdept

from Student S

where not exists (select * from SC T1

where T1.Sno='2000014' and not exists (select * from SC T2 where T2.Cno=T1.Cno and T2.Sno=S.Sno))

 

2  基本上都不对,我用word写完截图传上来吧

977657205
2013-12-19 · TA获得超过452个赞
知道小有建树答主
回答量:332
采纳率:100%
帮助的人:223万
展开全部
1.1    select Sno,Sname,Sage from Student where Sage >= 18 and Sage <= 20;
1.2    select s.Sno,s.Sname,c.Cname,sac.Grade from Student s full join SC sac on sac.Sno=s.Sno left join Cource c on c.Cno=sac.Cno;
1.3    select max(Grade),min(Grade) from SC where Cno=(select Cno from Cource where Cname='英语') group by Cno;
1.4    select Sname,Sdept from Student where sno in (select Sno from SC where Cno in (select Cno from SC where Sno='2000014') group by Sno having count(Sno)>=(select count(*) from SC where Sno='2000014'))

2.1    select s.Sno,s.Sname from Student s left join SC sac on sac.Sno=s.Sno left join Cource c on c.Cno=sac.Cno where c.Cname='管理学'
2.2    select s,Sno,s.Sname from (select Sno sn from SC where Cno in ('1024','1136') group by Sno having count(Sno)>=2) tmp left join Student s on tmp.Sno=s.Sno 
2.3    select s.Sname,s.Sdept from Student s left join (select Sno from SC where Cno='1156') tmp on tmp.Sno=s.Sno where s.Sno not in (tmp.Sno)
2.4    select s.Sname from (select Sno from SC where Cno in (select Cno from SC where Sno='2000014') group by Sno having count(Sno)>=(select count(*) from SC where Sno=(select Sno from Student where Sname='王林'))) tmp left join Student s on s.Sno=tmp.Sno
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TravyLee
2013-12-19 · TA获得超过261个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:229万
展开全部
这个嘛自己先做做吧。应该是学生做的题。实际工作中不会这么无聊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式