zoukankan      html  css  js  c++  java
  • 大鹏带你深层理解数据库习题

    把自己放在静心的境界里,悦读并记录多彩的自然、高尚的人性、纯洁的心灵、美好的情感,感觉很美好,很幸福,很开心!  

                                                                    经典十大SQL习题

    1.

    //查询每个年级的总学时数,并按照升序排列

    看到这题不要慌,认真分析题目所要求的内容,先从科目表中查询年级,要求为总学时数就要用到SUM(课时数)了

       升序就要用到order  by了.然后代码可想而知就出来了:

    select GradeId,SUM(ClassHour) as 总学时数
    from Subject
    group by GradeId
    order by sum(ClassHour)

    2.

    //查询每个参加考试的学员平均分

    题目要求我们查询每个参加考试的学员的平均分,理所当然就要用到AVG()函数,再往下想就要考虑到从什么表中

    查询,也就是从成绩表中在加上学生的编号,代码如下:

    select studentNo,AVG(studentresult) as 平均分
    from Result
    group by StudentNo

    3.

    //查询每门课程的平均分,并按照降序排列

    这一题跟2题类似都是求平均分,只不过要求我们是按照降序排列,我们只需要加一个DESC的关键字即可:

    select subjectid,AVG(studentresult)as 平均分
    from Result
    group by SubjectId
    order by 平均分 desc

    4.

    //查询每个学生参加所有考试的总分,并按照降序排列

    题中要求我们查询每个学生考试的总和,并按照降序.那可想而知一定得有SUM()函数与order by(DESC):

    select studentno,SUM(studentresult) as 总分
    from Result
    group by StudentNo
    order by 总分 desc

    5.

    //多列分组,每个年级 男女生总人数

    题中需要我们进行多列分组并求出男女生的总人数,这个时候就不需要SUM()函数了,需要用到COUNT()函数即可:

    select gradeid,gender,COUNT(1) 
    from student
    group by GradeId,Gender
    order by GradeId,Gender

    6.

    //每个年级的总人数,满足总人数必须大于等于3

    当题中限定一些条件的时候,我们不要去急着下定论,一定要冷静分析需要WHERE子句还是HAVING子句,因为WHERE子句只能对没有分组统计前的数据进行筛选.对分组后的条件筛选必选使用HAVING子句.所以这道题

    可想而知必须使用HAVING子句来实现咯~:

    select gradeid,COUNT(1) as 总人数
    from student
    group by GradeId
    having COUNT(1)>=3

    7.

    //查询每年级学时数超过40的课程数 

    这道题需要统计每年级学时超过40小时的课程总数,所以要用到COUNT()函数,要求为超过40则我们只需要

    加一个where子句即可实现:

    select gradeid,COUNT(subjectid) as 课程数
    from Subject
    where  ClassHour>40
    group by GradeId

     

    8.

    //查询参加考试的学生中,平均分及格的学生记录(学号,平均分),按照降序排列 

    看到这道题目,请仔细观察,不要被其中的字眼所迷惑,题中要求我们查询平均分及格的学生记录,注意是"平均分及格"

    先用AVG()函数求出考试学生的平均分,然后在筛选出平均分为60分以上也就是及格的学生,最后加一个DESC来

    降序即可:

    select studentno,AVG(StudentResult) as 平均分
    from Result
    group by StudentNo
    having AVG(StudentResult)>=60
    order by 平均分 desc

    9.

    //查询考试时间为2009-09-09课程的及格平均分

    这道题只需要限定好时间就可以查出想要的问题了:

    select subjectid,AVG(studentresult) as 平均分
    from Result
    where ExamDate>='2009-09-09' and  ExamDate<'2009-09-10'
    group by SubjectId
    having AVG(StudentResult)>=60

    10.

    //--统计至少有一次不及格的学生学号和次数。

    分析题目得出查询条件只要限定学生成绩低于60分以下即可:

    select studentno,COUNT(1) as  次数
    from Result
    where StudentResult<60
    group by StudentNo

     

  • 相关阅读:
    YARN的设计
    在(MRv1)中JobTracker工作方式
    经典 MapReduce框架(MRv1)
    进程与线程的简单解释
    Java序列化的机制和原理
    ibatis源码学习4_参数和结果的映射原理
    ibatis源码学习3_源码包结构
    ibatis源码学习2_初始化和配置文件解析
    ibatis源码学习1_整体设计和核心流程
    spring中的设计模式
  • 原文地址:https://www.cnblogs.com/System-out-println/p/4938504.html
Copyright © 2011-2022 走看看