美文网首页
sql整理_2查询练习_oracle

sql整理_2查询练习_oracle

作者: 南国铃子 | 来源:发表于2020-04-21 17:15 被阅读0次

    --1 查询含有杨字学生信息

    select * from student t where t.sname like '%杨%';

    -- 2 查询统计同龄学生人数

    select t.sage,count(*) from student t group by t.sage;

    --3 查询每门课程平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排序

    select * from 课程;

    select * from 成绩表;

    select c.cid,avg(c.cscore) from 成绩表 c group by c.cid order by avg(c.cscore),c.cid desc;

    select c.cid,k.cname,avg(c.cscore) from 课程 k,成绩表 c where k.cid = c.cid group by c.cid,k.cname order by avg(c.cscore),c.cid desc;

    --4、按平均成绩从高到低显示所有学生的平均成绩

    select sid,avg(Cscore) from 成绩表 group by sid order by avg(Cscore) desc;

    --5、查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分

    select sc.课程ID, c.cname 课程name, sc.最高分, sc.最低分, sc.平均分

      from (select s.cid 课程ID,

                  max(s.cscore) 最高分,

                  min(s.cscore) 最低分,

                  avg(s.cscore) 平均分

              from 成绩表 s

            group by s.cid) sc

      left join 课程 c

        on sc.课程ID = c.cid;

    select s.cid 课程ID,c.cname 课程name,max(s.cscore) 最高分,min(s.cscore) 最低分,avg(s.cscore) 平均分 from 成绩表 s left join 课程 c on s.cid = c.cid group by s.cid,c.cname;

    --6、按各科平均成绩从低到高顺序排序

    select sc.cid,avg(sc.cscore) from 成绩表 sc group by sc.cid order by avg(sc.cscore) asc;

    --7、查询学生的总成绩并进行排名

    select sc.sid,sum(sc.cscore) from 成绩表 sc group by  sc.sid order by sum(sc.cscore) desc;

    --8、检索至少选修两门课程的学生学号

    select sid/*,count(sc.cid)*/ from 成绩表 sc group by sc.sid having count(sc.cid) > 1;

    --9、查询每门课程被选修的学生数

    select sc.cid,count(sc.sid) from 成绩表 sc group by sc.cid;

    --10、查询不及格的课程,并按课程号从大到小排列

    select sc.cid from 成绩表 sc where sc.cscore < 60 order by sc.cid desc;

    select sc.cid,sc.cscore from 成绩表 sc group by sc.cid,sc.cscore having sc.cscore < 60 order by sc.cid desc;

    --11、查询出只选修了一门课程的全部学生的学号和姓名

    select sc.sid,s.sname from 成绩表 sc left join student s on sc.sid = s.sid group by sc.sid,s.sname having count(sc.cid) = 1;

    select sc.sid,s.sname from 成绩表 sc left join student s on sc.sid = s.sid group by sc.sid,s.sname having count(sc.cid) = 1;

    select sid,sname from student where sid in(select sid from 成绩表 group by sid having count(sid) = 1);

    --12、查询课程编号为"01"且课程成绩在60分以上的学生的学号和姓名;

    select s.sid,s.sname from (select sc.sid from 成绩表 sc where sc.cid in ('c01') and sc.cscore > 60) ss left join student s on ss.sid = s.sid;

    select s.sid,s.sname from student s where s.sid in (select sc.sid from 成绩表 sc where sc.cid ='c01' and sc.cscore > 60);

    --13、查询“01”课程比“02”课程成绩高的所有学生的学号;

    select sc1.sid from 成绩表 sc1,成绩表 sc2 where sc1.sid = sc2.sid and (sc1.cid = 'c01' and sc2.cid = 'c02') and sc1.cscore > sc2.cscore;

    --14、查询平均成绩大于60分的同学的学号和平均成绩;

    select sc.sid,avg(sc.cscore) from 成绩表 sc group by sc.sid  having avg(sc.cscore) > 60;

    --15、查询姓“李”的老师的个数;

    select count(k.cteacher) from 课程 k where k.cteacher like '%李%';

    select count(1) from 课程 k where k.cteacher like '%刘%';

    --16、查询没学过“李丽”老师课的同学的学号、姓名;

    select cj.sid from 成绩表 cj where cj.cid not in (select k.cid from 课程 k where k.cteacher like '李丽' ) group by cj.sid;

    select s.sid,s.sname from student s where s.sid not in (select cj.sid from 成绩表 cj where cj.cid in (select k.cid from 课程 k where k.cteacher like '李丽' ));

    select s.sid,s.sname from student s left join (select cj.sid from 成绩表 cj where cj.cid not in (select k.cid from 课程 k where k.cteacher like '李丽' ) group by cj.sid) cj on s.sid = cj.sid;

    --17、查询学过编号“01”并且也学过编号“02”课程的同学的学号、姓名;

    select s.sid,s.sname from student s where s.sid in (select cj1.sid from 成绩表 cj1,成绩表 cj2 where cj1.sid = cj2.sid and cj1.cid = 'c01' and cj2.cid = 'c02');

    --18、查询没学过"李丽"老师讲授的任一门课程的学生姓名

    select s.sname from student s where s.sid not in (select distinct(cj.sid) from 成绩表 cj where cj.cid in (select k.cid from 课程 k where k.cteacher like '李丽'));

    --19、查询所有同学的学号、姓名、选课数、总成绩

    select cj.sid 学号,s.sname 姓名,count(cj.cid) 选课数,sum(cj.cscore) 总成绩 from student s,成绩表 cj where s.sid = cj.sid group by cj.sid,s.sname;

    --20、查询学过“韩诊”老师所教的课的同学的学号、姓名;

    select s.sid,s.sname from student s where s.sid in( select distinct(cj.sid) from 成绩表 cj where cj.cid in (select k.cid from 课程 k where k.cteacher like '韩诊'));

    select sid, sname from student where sid in(select distinct(sc.sid) from 成绩表 sc

        left join 课程 c on sc.cid=c.cid where c.Cteacher = '韩诊') order by sid;

    --21、查询课程编号“01”的成绩比课程编号“02”课程低的所有同学的学号、姓名;

    select s.sid,s.sname from student s where s.sid in (

    select cj1.sid from 成绩表 cj1,成绩表 cj2 where cj1.sid = cj2.sid and cj1.cid='c01' and cj2.cid='c02' and cj1.cscore < cj2.cscore);

    --22、查询所有课程成绩小于60分的同学的学号、姓名;

    select sid, sname from student where sid not in( select distinct(sid) from 成绩表 where cscore >= 60) and sid in( select sid from 成绩表 group by sid having count(sid) != 0);

    select sid, sname from student where sid not in(select s.sid from student s

        left join 成绩表 sc on s.sid=sc.sid where Cscore > 60 or Cscore is null);

    select sid, sname from student where sid in(select sc.sid from 成绩表 sc group by sid having max(sc.Cscore)<60);

    ---23、查询没有学全所有课的同学的学号、姓名;

    select s.sid,s.sname from student s where s.sid not in (select cj.sid from 成绩表 cj group by cj.sid having count(cj.cid) = (select count(*) from 课程));

    select s.sid, s.sname from student s left join 成绩表 sc on s.sid=sc.sid group by s.sid,s.sname having count(s.sid) != (select count(1) from 课程);

    --24、查询至少有一门课与学号为“01”的同学所学相同的同学的学号和姓名;

    select s.sid,s.sname from student s where s.sid in (select distinct(cj.sid) from 成绩表 cj where cj.cid in (select cj.cid from 成绩表 cj where cj.sid = 's01') and cj.sid != 's01');

    select s.sid,s.sname from student s left join 成绩表 cj1 on s.sid = cj1.sid where cj1.cid in (select cj.cid from 成绩表 cj where cj.sid = 's01') and cj1.sid != 's01' group by  s.sid,s.sname;

    --25、查询和"01"号的同学学习的课程完全相同的其他同学的学号和姓名

    select s.sid,s.sname from student s left join 成绩表 sc on s.sid = sc.sid where sc.cid in(select cid from 成绩表 where sid = 's01') group by s.sid,s.sname having count(s.sid) = (select count(cid) from 成绩表 where sid='s01') and s.sid != 's01';

    --26、把“成绩”表中“刘里”老师教的课的成绩都更改为此课程的平均成绩;

    select avg(cj.cscore) from 成绩表 cj where cj.cid in (select kc.cid from 课程 kc where kc.cteacher like '刘里');

    select avg(sc.Cscore) from 课程 c left join 成绩表 sc on c.cid = sc.cid where Cteacher = '刘里';

    update 成绩表 set Cscore = (select avg(sc.Cscore) from 课程 c left join 成绩表 sc on c.cid = sc.cid where Cteacher = '刘里') where cid in (select cid from 课程 where Cteacher = '刘里');

    --27、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

    select s.sid,s.sname,avg(sc.cscore) from student s left join 成绩表 sc on s.sid = sc.sid where s.sid in(select sid from 成绩表 sc where Cscore < 60 group by sid having count(sid) >= 2) group by s.sid,s.sname;

    --28、检索"01"课程分数小于60,按分数降序排列的学生信息

    select cj.sid,cj.cscore,s.sname,s.sage from 成绩表 cj right join student s on cj.sid = s.sid where cj.cid = 'c01' and cj.cscore < 60 order by cj.cscore desc;

    select * from student s left join 成绩表 sc on s.sid=sc.sid where sc.Cscore < 60 and sc.cid = 'c01' order by sc.Cscore desc;

    --29、查询不同老师所教不同课程平均分从高到低显示

    select k.cteacher,k.cname,nvl(avg(cj.cscore),0) from 课程 k left join 成绩表 cj on k.cid = cj.cid group by k.cteacher,k.cname order by nvl(avg(cj.cscore),0) desc;

    --30、查询选修“高磊”老师所授课程的学生中,成绩最高的学生姓名及其成绩

    select s.sname,cj.cscore from student s left join 成绩表 cj on s.sid = cj.sid where cj.cscore =

    (select max(cj.cscore) 成绩 from 成绩表 cj where cj.cid = (select k.cid from 课程 k where k.cteacher = '高磊')) and cj.cid = (select k.cid from 课程 k where k.cteacher = '高磊');

    相关文章

      网友评论

          本文标题:sql整理_2查询练习_oracle

          本文链接:https://www.haomeiwen.com/subject/nxqcmhtx.html