zoukankan      html  css  js  c++  java
  • SQL_50题

    --1、查询“1001”课程比“1002”课程成绩高的所有学生的学号;
    select a.S# from
    (select S#,score from sc where C#=1001) a,
    (select S#,score from sc where C# = 1002) b
    where a.score>b.score and a.s#=b.s#;

    --2、查询平均成绩大于60分的同学的学号和平均成绩
    select S# as 学号,avg(score) as 平均成绩 from sc group by S# having avg(score) > 60;

    --3、查询所有同学的学号、姓名、选课数、总成绩;
    select sc.S# as 学号,Sname as 姓名,count(sc.c#) as 选棵数,sum(score) as 总成绩
    from sc,student s where sc.s# = s.s# group by sc.S#,Sname;

    --4、查询姓“李”的老师的个数;
    select count(*) from teacher where Tname like '张%';

    --5、查询没学过“叶平”老师课的同学的学号、姓名;
    select S# as 学号,Sname as 姓名 from student where S# not in(
    select S# from sc,course c,teacher t where sc.c#=c.c# and c.t#=t.t# and t.tname = '叶平');

    --6、查询学过“1001”并且也学过编号“1002”课程的同学的学号、姓名;
    select sc.S#,Sname from sc,student s where sc.s# = s.s# and sc.C# = 1001 and
    exists(select * from sc sc2 where sc.s# = sc2.s# and sc2.c#=1002)
    --注:先执行exists语句,如果查询到结果,返回ture并执行前面的语句;
    -- 如果没有查询到结果,返回false,前面的查询不在执行


    --7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
    select S#,Sname from student where S# in (
    select sc.S# from sc,course c,teacher t where sc.c#=c.c# and c.t#=t.t#
    and Tname = '叶平' group by S# having count(sc.C#) = (
    select count(C#) from course c,teacher t where c.t#=t.t#
    and Tname = '叶平'))

    --8、查询课程编号“1001”的成绩比课程编号“1002”课程低的所有同学的学号、姓名;
    select S#,Sname from student where S# in (
    select a.S# from (select S#,score from sc where C#=1001) a,
    (select S#,score from sc where C#=1002) b where a.score < b.score and a.s#=b.s#);

    --9、查询所有课程成绩小于60分的同学的学号、姓名;
    select S#,Sname from student where S# not in (
    select S# from sc where score > 60 );

    --10、查询没有学全所有课的同学的学号、姓名;
    select sc.s#,Sname from sc,student s where sc.s#=s.s# group by sc.S#,Sname
    having count(sc.C#) < (select count(*) from course );

    --11、查询至少有一门课与学号为“1”的同学所学相同的同学的学号和姓名
    select sc.S#,Sname from sc,student s
    where sc.s#=s.s# and sc.c# in (select C# from sc where s#=1)
    group by sc.S#,Sname;

    --12、查询至少学过学号为“1”同学所有一门课的其他同学学号和姓名;
    select distinct S# from sc where C# in(
    select C# from sc where S#=1)


    --13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
    update sc
    set score =
    (select avg(score)
    from sc
    where c# =
    (select c#
    from course
    where t# = (select t# from teacher where tname = '叶平')))
    where c# = (select c#
    from course
    where t# = (select t# from teacher where tname = '叶平'));

    -- (14)查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名;

    select student.S#, sname
    from student
    join sc
    on student.s# = sc.s#
    where C# in (select C# from SC where S# = '1')
    group by student.S#, sname
    having count(*) = (select count(*) from SC where S# = '1');
    --15、删除学习“叶平”老师课的SC表记录;
    delete from sc
    where c# = (select c#
    from course, teacher
    where course.t# = teacher.t#
    and tname = '叶平')

    --(16)向SC表中插入一些记录,这些记录要求符合以下条件:
    select * from sc;
    --①没有上过编号“002”课程的同学学号;②插入“002”号课程的平均成绩;
    insert into sc select s.S#,1002,(select avg(score) from sc where C#=1002)
    from Student s where S# not in(select S# from sc where C#=1002)

    -- (17)按平均成绩从低到高显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,
    --按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分;
    select t.S#,
    (select sc.score from sc where sc.s#=t.s# and sc.c#=1001) as 语文,
    (select sc.score from sc where sc.s#=t.s# and sc.c#=1002) as 数学,
    (select sc.score from sc where sc.s#=t.s# and sc.c#=1003) as 英语,
    count(t.c#) as 课程数,
    avg(t.score) as 平均分
    from sc t group by t.s# order by avg(t.score)

    --18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分
    select C#,max(score),min(score) from sc group by C#

    --19、按各科平均成绩从低到高和及格率的百分数从高到低顺序


    select C#,avg(score),sum(case when score>=80 then 1 else 0 end)/count(*)*100 || '%' as 及格率
    from sc group by C# order by avg(score) asc;


    ----20、查询如下课程平均成绩和及格率的百分数(用"1行"显示):
    -- 数学(001),马克语文思(002),英语 (003),物理(004)
    select avg(a.score) as 语文平均成绩,
    sum(case when sc.c#=1001 and sc.score>=60 then 1 else 0 end)/sum(case when sc.c#=1001 then 1 else 0 end)*100
    || '%' as 语文及格率,
    avg(a.score) as 数学平均成绩,
    sum(case when sc.c#=1002 and sc.score>=60 then 1 else 0 end)/sum(case when sc.c#=1002 then 1 else 0 end)*100
    || '%' as 数学及格率,
    avg(a.score) as 英语平均成绩,
    sum(case when sc.c#=1002 and sc.score>=60 then 1 else 0 end)/sum(case when sc.c#=1003 then 1 else 0 end)*100
    || '%' as 英语及格率
    from
    (select score from sc where c#=1001) a,
    (select score from sc where c#=1002) b,
    (select score from sc where c#=1003) c,sc

    --21、查询不同老师所教不同课程平均分从高到低显示
    select sc.c#, course.cname, teacher.tname, avg(score)
    from teacher, sc, course
    where teacher.t# = course.t#
    and course.c# = sc.c#
    group by sc.c#, course.cname, teacher.tname
    order by avg(score) desc

    --23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
    select sc.c# as 课程号,Cname as 课程名,
    sum(case when score between 85 and 100 then 1 else 0 end) as "[100-85]",
    sum(case when score between 70 and 85 then 1 else 0 end) as "[85-70]",
    sum(case when score between 60 and 70 then 1 else 0 end) as "[70-60]",
    sum(case when score < 60 then 1 else 0 end) as "[ <60] "

    from sc,course c where sc.c#=c.c# group by sc.c#,Cname

    --25、查询各科成绩前三名的记录:(不考虑成绩并列情况)

    select C#,S#,score from
    (select S#,C#,score,rank() over(partition by C# order by score desc) rn from sc)
    where rn<=3 order by C#,S#;

    --26、查询每门课程被选修的学生数
    select C#,count(s#) from sc group by C#;

    --27、查询出只选修了一门课程的全部学生的学号和姓名
    select sc.S#,Sname from student s,sc where sc.s#=s.s# group by sc.s#,Sname having count(sc.c#)=1

    --28、查询男生、女生人数
    select distinct
    (select count(1) from student where ssex='m') as 男生人数,
    (select count(1) from student where ssex='w') as 女生人数
    from student group by student.ssex;


    --29、查询姓“张”的学生名单
    select sname from student where sname like '张%'

    --30、查询同名学生名单,并统计同名人数
    select Sname,count(*) from student group by Sname having count(*) > 1;


    --31、1999年出生的学生名单

    --select to_number(Sage) from Student; --将varchar2转为number
    --select to_number(to_char(sysdate,'yyyy')) from dual;

    select S#,Sname from Student where Sage=(
    select to_number(to_char(sysdate,'yyyy'))-1999 from dual
    )

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

    select C#, avg(score) from sc group by C# order by avg(score) ,C# desc


    --33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩
    select sc.S#,Sname,avg(score) from sc,student s where sc.s#=s.s# having avg(score)>85 group by sc.S#,Sname


    --34、查询课程名称为“数学”,且分数低于80的学生姓名和分数
    select s.Sname,score from Student s,sc,course c where
    s.s#=sc.s# and sc.c#=c.c# and c.cname='数学' and sc.score<80;

    -- 35、查询所有学生的选课情况;??????????
    select s.S#,s.Sname,c.Cname from Student s,sc,course c where s.s#=sc.s#
    and sc.c#=c.c# group by s.S#,s.Sname,c.Cname order by s.S# ;

    -- 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;
    select Sname,c.Cname,score from Student s,course c,sc where
    s.s#=sc.s# and sc.c#=c.c# and sc.score>70 order by s.s#;


    -- 37、查询不及格的课程,并按课程号从大到小排列
    select c# from sc where score<60 order by C# desc;

    --38、查询课程编号为3且课程成绩在80分以上的学生的学号和姓名
    select sc.s#,sc.c#,Sname from sc, student s where sc.s#=s.s# and C#=1003 and score>80;

    --39、求选了课程的学生人数
    select count(distinct S#) from sc

    --40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩
    select Sname,score from sc,student s,course c,teacher t where
    sc.s#=s.s# and c.c#=sc.c# and c.t#=t.t# and t.tname='张老师'
    and score=(select max(score) from sc sc2 where sc2.s#=s.s#)


    --41、查询各个课程及相应的选修人数
    select C#,count(S#) from sc group by C# order by C#;

    --42、查询不同课程成绩相同的学生的学号、课程号、学生成绩
    select distinct a.S#,a.C#,b.score from sc a,sc b where a.score=b.score and a.c#<>b.c#;


    --43、查询每门功成绩最好的前两名
    select * from (select S#,C#,score,row_number() over(partition by C# order by score desc) rn
    from sc) where rn<=2;


    --44、统计每门课程的学生选修人数(超过人的课程才统计)。
    --要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列
    select C# as 课程号, count(S#) as 选修人数 from sc group by C#
    having count(S#)>4 order by count(S#) desc,C# asc;

    --45、检索至少选修两门课程的学生学号
    select S#, count(C#) from sc group by S# having count(C#)>=2;


    --46、查询全部学生都选修的课程的课程号和课程名
    select sc.C#,c.Cname from course c,sc where c.c#=sc.c# group by sc.c#,c.Cname
    having count(sc.c#)=(select count(*) from Student)


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

    select sc.C#,c.Cname from SC sc,Course c
    where sc.C#=c.C#
    group by sc.C#,c.Cname
    having COUNT(sc.S#)=(select COUNT(distinct s.S#) from Student s)

    --47、查询没学过“叶平”老师讲授的任一门课程的学生姓名
    select S#,Sname from student where S# not in(
    select S# from SC where C# in(
    select C# from course where T#=(select T# from teacher where Tname='张叶平老师')))

    --
    select sname
    from student
    where s# not in (select s#
    from sc, course, teacher
    where sc.c# = course.c#
    and teacher.t# = course.t#
    and tname = '叶平')

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

    select s#, avg(score)
    from sc
    where s# in (select sc2.s#
    from sc sc2
    where sc2.score < 79
    group by sc2.s#
    having count(sc2.c#) > 2)
    group by s#

    --49、检索“1004”课程分数大于60的学号,按分数降序排列的同学学号

    select S#,score from sc where C#=1004 and score>60 order by score desc;


    --50、删除“1”同学的“1001”课程的成绩
    delete from sc where S#=1 and C#=1001

  • 相关阅读:
    HTML
    短信发送平台-阿里大于
    java基础练习题
    2019年让程序员崩溃的 60 个瞬间,笑死我了
    JDBC连接时出现的问题总结
    Java 学习笔记 IO流与File操作
    Java 学习笔记 两大集合框架Map和Collection
    我的github博客地址
    重新认识mapreduce
    java打字游戏
  • 原文地址:https://www.cnblogs.com/LLLaoJia/p/11213875.html
Copyright © 2011-2022 走看看