• 99作业讲解


    student.sql

    一、查询每个专业的学生人数

    select count(studentno),majorid

    from student

    group by majorid;

    二、查询参加考试的学生中,每个学生的平均分、最高分

    select studentno,avg(score),max(score)

    from result

    group by studentno;

    三、查询姓张的每个学生的最低分大于60的学号、姓名

    select s.studentno,studentname,min(score)  #这里要用s.studentno或r.studentno,不能只用studentno,因为inner join后得到的表有两个名为studentno的列,studentname前面不用加:(表.studentname),因为inner join得到的表只有一个studentname列

    from student s

    inner join result r

    on s.studentno = r.studentno

    where studentname like '张%' 

    group by studentno,studentname

    having min(score) > 60;

    四、查询每个专业生日在“1988-1-1”后的学生姓名、专业名称

    select studentname,majorname

    from student

    left outer join major  #这里用左外连接是考虑到:假如student表中有个majorid=9,而major表中majorid in (1,2,3).当然此题inner join也可以

    on student.majorid = major.majorid

    where datediff(borndate,'1988-1-1') > 0;

    五、查询每个专业的男生人数和女生人数分别是多少

    select count(studentno),sex

    from student

    group by sex,majorid;

    #方式2:

    select majorid,

    (select count(*) from student where sex='男' and majorid = s.majorid) 男,

    (select count(*) from student where sex='女' and majorid = s.majorid) 女

    from student s  #必须要取别名才有效

    group by majorid;

    六、查询专业和张翠山一样的,学生的最低分

    select min(score),majorid,studentno

    from student

    where majorid = (

    select majorid

    from student

    where studentname = '张翠山'

    )

    group by studentno;

    七、查询大于60分(result表中)的学生的姓名、密码(student表中)、专业名(major表中)

    select studentname,loginpwd,majorname,tab_1.studentno,score

    from

      (select studentname,loginpwd,majorname,studentno

    from student

    inner join major

    on student.majorid = major.majorid

    group by studentno) as tab_1

    left outer join result

    on tab_1.studentno = result.studentno

    where score > 60;

    八、按邮箱位数分组,查询每组的学生个数

    select count(*),length(email)

    from student

    group by length(email);

    九、查询学生名(student表中)、专业名(major表中)、分数(result表中)

    select studentname,majorname,score

    from

      (

    select studentname,majorname,studentno

    from student

    left outer join major

    on student.majorid = major.majorid

        ) as stu_maj

    left outer join result

    on result.studentno = stu_maj.studentno;

    十、查询哪个专业(major表中)没有学生(student表中),分别用左连接和右连接实现

    select majorname

    from student

    left outer join major

    on student.majorid = major.majorid

    group by majorname

    having count(*) = 0;

    十一、查询没有成绩的学生人数

    select count(*)

    from student

    left outer join result

    on student.studentno = result.studentno

    where score is null;

  • 相关阅读:
    EXTJS 动态改变Gird 列值
    EXTJS动态改变store的proxy的params
    获取Spring容器Bean
    EXTJS 6 必填项加星号*
    Maven打包附加配置文件
    MyEclipse 优化
    Android-SurfaceView生命周期
    Android-PopupWindow
    Android-Sqlite3的使用
    Android-adb的使用
  • 原文地址:https://www.cnblogs.com/tan-y-q/p/10584750.html
Copyright © 2020-2023  润新知