大鹏带你深层理解数据库习题

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

                                                                经典十大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

 

时间: 2024-10-13 22:59:38

大鹏带你深层理解数据库习题的相关文章

带你深入理解Android Handler机制

带你深入理解Android Handler机制 欢迎转载请注明来源 说到消息机制,我们一定会想到Handler,由于Android系统规定主线程不能阻塞超过5s,否则会出现"Application Not Responding".也就是说,你不能在主线程中进行耗时操作(网络请求,数据库操作等),只能在子线程中进行.下面先来看一下在子线程中访问UI会出现什么情况. public void click(View v){ new Thread(new Runnable() { @Overri

MySQL深层理解

MySQL是一个关系型数据库,关联的数据保存在不同的表中,增加了数据操作的灵活性. 执行流程 MySQL是一个单进程服务,每一个请求用线程来响应, 流程: 1,客户请求,服务器开辟一个线程响应用户. 2,用户发起SQL请求, 3,查询缓存,并记录用户SQL,如果再次查询,直接查缓存. 4,没有缓存,进入分析器, 语法分析器:检查语法 词法分析器:将命令切片,按空格隔开,获取表,内容和用户权限. 5,优化执行路径选择,生产执行树. 6,存储引擎:用于管理存储文件系统,给上层应用提供不同管理. 那么

通俗理解数据库隔离机制

=========================================== 原文链接: 通俗理解数据库隔离机制   转载请注明出处! =========================================== 在理解数据库隔离机制的时候发现网上很多文章都是千篇一律,解释语言太过于标准书面化,描述的晦涩难懂,因果关系模糊.在这里将自己对隔离机制的理解描述一下,力争做到能够通过浅显的语言描述出来. 数据库隔离机制是对于多线程同时操作数据库而言的.对于单线程操作数据库不存在所谓

带你深入理解STL之迭代器和Traits技法

在开始讲迭代器之前,先列举几个例子,由浅入深的来理解一下为什么要设计迭代器. //对于int类的求和函数 int sum(int *a , int n) { int sum = 0 ; for (int i = 0 ; i < n ; i++) { sum += *a++; } return sum; } //对于listNode类的求和函数 struct ListNode { int val; ListNode * next; }; int sum(ListNode * head) { int

poj水题-3062 超级水题的深层理解——代码简化

题目很简单,要求输入什么样输出什么样.以回车结束 这就是我用的C代码 #include <stdio.h> int main (){char p;for(;gets(&p);)puts(&p);return 0;} 使用了代码简化方案,我简化到了75B.有大神简化到31B,真想看看他们的源代码.我估计他们比我个能够了解语言规则. 这里不得不说一本叫<短码之美>的书.介绍了这道题.但我试过了,没用.可能系统升级了吧,必须要求C99. ,还听说不用#include也行,

带你深入理解STL之Vector容器

C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. STL实现了一个Vector容器,该容器就是来改善数组的缺点.vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充以容纳新元素.因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,再也不必因为害怕空间不足而一开始就配置一个大容量数组了,vector是用多少就分配多少. 要

Hibernate为表字段添加备注信息,便于理解数据库设计

java实体类,可以加上字段的描述,是个好的习惯吧,便于理解数据库设计,为后期维护,升级,改造提供支持

android中Logcat的深层理解

Android的开发也可以归类为嵌入式设备的开发,即便不是嵌入式开发,依然要注意对内存和处理的使用.养成一个好的习惯对自己的帮助是很大的. 在Log的源码中可以看到这样的注释: The order in terms of verbosity, from least to most is * ERROR, WARN, INFO, DEBUG, VERBOSE. Verbose should never be compiled * into an application except during

AndroidEventBus源码解析带你深入理解EventBus(转载)

AndroidEventBus源码解析带你深入理解EventBus 转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40920453,本文出自:[张鸿洋的博客] 上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般