zoukankan      html  css  js  c++  java
  • mysql练习题 泽桐

    表结构和数据:http://www.cnblogs.com/wupeiqi/articles/5748496.html

    题目:
    2、查询“生物”课程比“物理”课程成绩高的所有学生的学号;
    1)
    select A.student_id,生物分数,物理分数 from
    (select student_id,num as 生物分数
    from score
    where course_id=(select cid from course where cname='生物')) as A
    left join
    (select student_id,num as 物理分数
    from score
    where course_id=(select cid from course where cname='物理')) as B
    on A.student_id = B.student_id where 生物分数 > if(isnull(物理分数),0,物理分数);
    2)
    select A.student_id,生物分数,物理分数 from
    (select student_id,num as 生物分数 from score left join course on score.course_id = course.cid where course.cname = '生物') as A
    left join
    (select student_id,num as 物理分数 from score left join course on score.course_id = course.cid where course.cname = '物理') as B
    on A.student_id = B.student_id where 生物分数 > if(isnull(物理分数),0,物理分数);


    3、查询平均成绩大于60分的同学的学号和平均成绩;
    select student_id,avg(num) as 平均成绩 from score group by student_id having 平均成绩 > 60;


    4、查询所有同学的学号、姓名、选课数、总成绩;
    select student.sid,sname,count(student_id),sum(num)
    from score right join student
    on student.sid=student_id
    group by student_id;


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



    6、查询没学过“李平老师”老师课的同学的学号、姓名;
    select distinct student.sid,sname from student where sid not in (
    select distinct student_id
    from score
    where course_id in(
    select cid
    from course left join teacher
    on course.teacher_id=teacher.tid
    where tname = '李平老师')
    );

    7、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
    1)
    select A.sid,A.sname from
    (select student.sid,sname from score right join student
    on student.sid=student_id
    where course_id='001') as A
    inner join
    (select student.sid,sname from score right join student
    on student.sid=student_id
    where course_id='002') as B
    on A.sid=B.sid
    2)
    select student_id,sname from
    (select student_id,course_id from score where course_id = 1 or course_id = 2) as B
    left join student on B.student_id = student.sid group by student_id HAVING count(student_id) > 1


    8、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
    select student.sid,sname from score right join student
    on student.sid=student_id
    where course_id in(
    select cid from course left join teacher
    on course.teacher_id=teacher.tid
    where tname='李平老师'
    ) group by student.sid HAVING count(student.sid) = (
    select count(cid) from course left join teacher
    on course.teacher_id=teacher.tid
    where tname='李平老师'
    );

    9、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;
    select sname,sid from student inner join (
    select A.student_id from
    (select student_id,num as s1 from score left join course on score.course_id = course.cid where course.cid = '001') as A
    left join
    (select student_id,num as s2 from score left join course on score.course_id = course.cid where course.cid = '002') as B
    on A.student_id = B.student_id where s1 > if(isnull(s2),0,s2)
    ) as C
    on C.student_id=student.sid;

    10、查询有课程成绩小于60分的同学的学号、姓名;
    select distinct student.sid,sname from student left join score
    on student.sid=score.student_id
    where num<60;

    11、查询没有学全所有课的同学的学号、姓名;
    select student.sid,sname from score right join student
    on student.sid=score.student_id
    group by student_id
    having count(student_id) != (
    select count(*) from course
    );

    12、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名;
    select student.sid,sname,count(sname) from score right join student
    on student.sid=student_id
    where student_id !='001' and course_id in (
    select course_id from score where student_id='001'
    ) group by student_id;

    13、查询至少学过学号为“001”同学所有课的其他同学学号和姓名;
    select student.sid,sname from score right join student
    on student.sid=student_id
    where student_id !='001' and course_id in (
    select course_id from score where student_id='001'
    ) group by student_id
    having count(sname) >= (
    select count(*) from score
    where student_id='001');

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

    select student.sid,sname from score right join student
    on student.sid=student_id where student_id in(
    select student_id from score where student_id != 2 group by student_id HAVING count(course_id) = (select count(course_id) from score where student_id = 2))
    and course_id in (
    select course_id from score where student_id='002'
    ) group by student_id
    having count(course_id) = (
    select count(course_id) from score
    where student_id='002');

    15、删除学习“叶平”老师课的score表记录;
    delete from score where course_id in (
    select cid from course left join teacher on course.teacher_id=tid where tname='李平老师'
    )

    16、向SC表中插入一些记录,这些记录要求符合以下条件:①没有上过编号“002”课程的同学学号;②插入“002”号课程的平均成绩;
    insert into score(student_id, course_id, num) select sid,2,(select avg(num) from score where course_id = 2)
    from student where sid not in (
    select student_id from score where course_id = 2
    )

    17、按平均成绩从低到高 显示所有学生的“生物”、“物理”、“体育”、“美术”4门的课程成绩,按如下形式显示:学生ID,生物,物理,体育,美术,有效课程数,有效平均分;(不会这种查询语法)
    select student_id,
    (select num from score s left join course c on s.course_id=c.cid where cname='生物' and sc.student_id=s.student_id) as 生物分数,
    (select num from score s left join course c on s.course_id=c.cid where cname='物理' and sc.student_id=s.student_id) as 物理分数,
    (select num from score s left join course c on s.course_id=c.cid where cname='体育' and sc.student_id=s.student_id) as 体育分数,
    (select num from score s left join course c on s.course_id=c.cid where cname='美术' and sc.student_id=s.student_id)as 美术分数,
    count(course_id),avg(num)
    from score sc
    group by student_id
    order by avg(num);


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

    19、按各科平均成绩从低到高和及格率的百分数从高到低顺序;
    1)
    select avg(num),score.course_id,课程人数,课程及格人数,(课程及格人数/课程人数*100) as 及格率 from score left join
    (select course_id,count(student_id) as 课程人数 from score group by course_id order by course_id) as A
    on score.course_id=A.course_id
    left join
    (select course_id,count(student_id) as 课程及格人数 from score where num >=60 group by course_id order by course_id) as B
    on A.course_id=B.course_id
    group by score.course_id
    having
    order by avg(num),及格率 desc;
    2)
    select course_id, avg(num) as avgnum,sum(case when score.num > 60 then 1 else 0 END)/count(1)*100 as percent from score group by course_id order by avgnum asc,percent desc;

    20、课程平均分从高到低显示(现实任课老师);
    select tname,avg(课程平均分) from
    (select tname,c.cid from teacher t right join course c on t.tid=c.teacher_id) as A
    left join
    (select avg(num) as 课程平均分,course_id from score group by course_id order by avg(num) desc) as B
    on A.cid=B.course_id
    group by tname
    order by avg(课程平均分) desc;

    21、查询各科成绩前5名的记录:(不考虑成绩并列情况);
    select distinct cname,course_id,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 2,1) as third_num,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 3,1) as fourth_num,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 4,1) as fifth_num
    from score s1 left join course c on c.cid=s1.course_id;

    22、查询每门课程被选修的学生数;
    select course_id,count(student_id) from score group by course_id;

    23、查询出只选修了一门课程的全部学生的学号和姓名;
    select student_id,sname from student st left join score sc on st.sid=sc.student_id
    group by student_id
    having count(course_id)=1;

    27、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
    select course_id,avg(if(isnull(num),0,num)) from score group by course_id order by avg(num),course_id desc;

    28、查询平均成绩大于85的所有学生的学号、姓名和平均成绩;
    select student_id,sname,avg(num) from score sc left join student st on sc.student_id=st.sid group by student_id;

    29、查询课程名称为“生物”,且分数低于60的学生姓名和分数;
    select sname,num from score sc left join student st on sc.student_id=st.sid
    left join course c on c.cid=sc.course_id
    where c.cname='生物' and num<60;

    31、求选了课程的学生人数
    select count(distinct student_id) from score


    32、查询选修“张磊老师”老师所授课程的学生中,成绩最高的学生姓名及其成绩;
    select sname,max(num) from score sc
    left join student st on sc.student_id=st.sid
    where course_id in (
    select cid from course c
    left join teacher t on c.teacher_id=t.tid
    where tname='张磊老师'
    );

    33、查询各个课程及相应的选修人数;
    select cname,count(student_id) from score sc
    left join course c on c.cid=sc.course_id
    group by course_id;

    34、查询不同课程但成绩相同的学生的学号、课程号、学生成绩;
    select student_id,course_id,num from score where sid in (
    select s1.sid from score s1
    inner join score s2 on s1.num=s2.num and s1.course_id != s2.course_id)

    35、查询每门课程成绩最好的前两名;
    select distinct cname,course_id,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
    (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num
    from score s1 left join course c on c.cid=s1.course_id;

    36、检索至少选修两门课程的学生学号;
    select student_id from score sc group by student_id having count(course_id)>1;

    37、查询全部学生都选修的课程的课程号和课程名;
    select course_id,cname from score sc
    right join course c on c.cid=sc.course_id
    group by course_id
    having count(student_id)=(
    select count(distinct sid) from student
    );

    38、查询没学过“叶平”老师讲授的任一门课程的学生姓名;
    select dictinct sname from score sc
    left join student st on sc.student_id=st.sid
    where student_id not in (
    select student_id from score where course_id in (
    select cid from course c left join teacher t on c.teacher_id=t.tid where tname='张磊老师'
    )
    );

    39、查询两门以上不及格课程的同学的学号及其平均成绩;
    select student_id,avg(num) from score where student_id in (
    select student_id from score where num<60 group by student_id having count(course_id)>1
    ) group by student_id;

    40、检索“004”课程分数小于60,按分数降序排列的同学学号;
    select student_id from score where course_id=4 and num<60 order by num desc;

  • 相关阅读:
    获取网页可视区域的宽高,不包括工具栏和滚动条(浏览器窗口可视区域大小)
    display:inline-block 来解决盒子高度不一样,造成的盒子浮动
    Jquery UI 中的datepicker() ,获取日期后的回调函数onClose()
    删除url搜索带的参数
    判断表单是否需要校验时可以按照类似逻辑去处理
    去除url中锚点的方法
    js常面试基础题
    vue项目总结
    vue-router
    回流与重绘
  • 原文地址:https://www.cnblogs.com/linzetong/p/8324807.html
Copyright © 2011-2022 走看看