永发信息网

Oracle的问题

答案:2  悬赏:0  手机版
解决时间 2021-02-28 22:02
2、问题描述:
已知关系模式:
1、s (sno,sname) 学生关系。sno 为学号,sname 为姓名
2、c (cno,cname,cteacher) 课程关系
cno 为课程号,cname 为课程名,cteacher 为任课教师
3、sc(sno,cno,scgrade) 选课关系。scgrade 为成绩
要求实现如下5 个处理:
1.找出没有选修过“李明”老师讲授课程的所有学生姓名
2.列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
3.列出既学过“1”号课程,又学过“2”号课程的所有学生姓名
4.列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号
5.列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和
“2”号课的成绩
最佳答案
1.找出没有选修过“李明”老师讲授课程的所有学生姓名

--实现代码:
Select Sname As 学生姓名
From s
Where Not Exists (Select *
From c, Sc
Where c.Cno = Sc.Cno
And Cteacher = '李明'
And Sc.Sno = s.Sno);

Select Sname As 学生姓名
From s
Where Sno Not In (Select Sno
From c, Sc
Where c.Cno = Sc.Cno
And Cteacher = '李明');

2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

--实现代码:
Select s.Sno As 学生学号, s.Sname As 学生姓名, Avg(Sc.Scgrade) As 平均成绩
From s, Sc
Where Sc.Sno = s.Sno
And Sc.Sno In (Select Sc.Sno
From Sc
Where Sc.Scgrade < 60
Group By Sc.Sno
Having Count(*) > 2)
Group By s.Sno, s.Sname;

3. 列出既学过“01”号课程,又学过“02”号课程的所有学生姓名

--实现代码:
select s.sno as 学生学号,s.sname as 学生姓名 from s where sno in(select sc.sno as 学生学号 from c,sc where c.cno=sc.cno and c.cno in('01','02') group by sno having count(distinct sc.cno)=2);

4. 列出“01”号课成绩比“02”号同学该门课成绩高的所有学生的学号

--实现代码:
select sc1.sno as 学生学号 from sc as sc1,c as c1,sc as sc2,c as c2
where sc1.cno=c1.cno and c1.cno='01' and sc2.cno=c2.cno and c2.cno='02'
and sc1.scgrade>sc2.scgrade group by sc1.sno;

5. 列出“01”号课成绩比“02”号课成绩高的所有学生的学号及其“01”号课和“02”号课的成绩

--实现代码:
select sc1.sno as 学生学号, sc1.scgrade as no1grade ,sc2.scgrade as no2grade
from sc as sc1,c as c1,sc as sc2,c as c2
where sc1.cno=c1.cno and c1.cno='01' and sc2.cno=c2.cno and c2.cno='02'
and sc1.scgrade>sc2.scgrade group by sc1.sno;
全部回答

create or replace function getnumfromstr(str in varchar2) return number

is

    v_str varchar2(1000);

begin

    if str is null or trim(str) = '' then

    return 0;

    else

    v_str := regexp(str,'[:alpha:]','');  --这地方用了oracle的正则表达式,[:alpha:]可以匹配字符a-z和a-z

    if v_str is null then

    return 0;

    else

    return to_number(v_str);

    end if;

    end if;

exception

    when others then

    dbms_output.put_line(sqlcode||':  'sqlerrm);

end;

   

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
有关借物喻人的作文
在杭州西湖与白居易有关的建筑是?
怎样删除自己设置的微信号……谢谢
梦幻西游毗舍童子出现在什么场景
新东方(长春新东方繁荣路校区)怎么去啊,有知
济南如何能用银行卡在网上交有线电视费
丰田普拉多+RES和-SET是什么意思
爵美轩足疗保健我想知道这个在什么地方
金蝶公司怎么样
摩托车总熄火什么原因
立春特约手机专卖地址在什么地方,想过去办事
为什么我手机新买的,第一次开机没有“设置向
台式电脑电源什么牌子的最好 ,大概多少钱?
请用unpleasant造句 稍微简单一点的句子3句
广州五月花广场ochily隔离果间系咩牌子啊?有
推荐资讯
手机照片ps软件哪个好
经开区梁尤光西医内科诊所地址有知道的么?有
在空间四边行ABCD中,BC=AC,AD=BD,作BE垂直CD
文山三鑫建材机电批发城地址在什么地方,想过
火旺666蚝赞烧烤地址在什么地方,想过去办事
长春大学 长春工业大学 吉林建工大学 北华大
为什么我的空间充斥着这样的说说
驾驶证第四个帮朋友扣分 被锁死 扣了3分 帮别
胖子酷车之家在哪里啊,我有事要去这个地方
纯真味这个品牌是哪里的,都有些什么产品呢?
手动档半联动倒车加油太猛冒烟了。因为是大坡
芜湖环球汽车配件有限公司地址在哪,我要去那
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?