SQL语言-select查询操作
2016-10-11 13:35
211 查看
1、 统计有学生选修的课程数
我们是要统计有学生选修的课程数,那么肯定是需要有count()这个函数的,然后,我们只需要统计下出现的课程号就可以了:select count(distinct sc.cno) as course_num from sc
我们可以看到输出的结果为:
2、 求选修4号课程的学生的平均年龄
我们可以看到,这个题目中有了一个限定条件,为选修了四号课程的学生,所以,我们可以在中间加以判断,在选出了适合的学生之后,我们可以进行年龄的平均数计算,我们看到平均数是需要利用avg()函数的,所以,我们可以进行下面的实验了:select avg(S.sage) as avg_age from student as S,sc as T where T.cno = 4 and S.sno = T.sno
我们可以看到输出的结果为:
3、 求学分为3的每门课程的平均分
这里需要注意的是每门课程,所以,我们输出的结果就不像前面一样了,只是单一的结构,我们这次输出的结果就是多元的结果,因为学分为3的课程并不只是一种课程类型。所以,我们需要利用的就是group by这一个语句,通过对课程进行分组,我们可以分别输出对应的平均分数,而求平均分的方法,上一题也讲到了,但是,我们需要输出的是课程号和成绩,这两个元素不在一个表中,我们需要进行链接,因为中间可能有null的出现,所以,我们利用外链接的形式,只连接自己想要的部分,来完成这次的实验:select T.cno,T.cname,avg(sc.grade) as avgscore from (select cno,cname from course where ccredit = 3) as T left join sc on sc.cno = T.cno left join student on student.sno = sc.sno group by T.cno
输出的结果为:
4、 求选修超过三人的课程号和选修人数,结果按照人数降序排列,如果人数相同按照升序排列:
我们看到,这个题目中,主要的还是和人数有关,所以,我们可以看到的是,用count进行计数,然后,我们在输出的时候还是需要利用group by来进行输出的,这样的话,我们就可以分组进行输出的,最后一点需要注意的就是我们的顺序问题,按照人数的降序和课程号的,默认的输出结果就是升序,如果要用降序的话,我们需要做的就是加入desc这一变量,这样的话,我们就可以完成这次的试验了:select cno,count(sno) as student_num from sc group by cno having count(sno)>3 order by count(sno)desc ,cno
所以,看到,我们的输出的结果为:
5、 查询所有学号比王琳同学大,年龄比她小的同学的学生姓名
我们需要比较的对象有两个,一个是学号,一个是年龄,所以,我们通过,姓名,学号,来进行比较:select T.sname from student as T,student as S where S.sname = '王琳' and T.sno > S.sno and T.sage < S.sage
所以,我们可以看到的是,结果如下:
6、 检索所有以王姓开头的同学的姓名和学号
我们这里需要比较的是王姓开头,所以,我们可以看到的是利用了’%’,这种结构是比较常见的比较结构,所以,我们可以进行如下的操作:select sname,sage from student where sname like '王%';
可以看到,得到的结果为:
7、 在sc表中检索成绩为空值的学生的学号和课程号
这里是进行一次空值的检索,所以,我们需要比较的就是null,那么如何进行比较呢?我们可以利用is null来进行判断,这样的话,我们就可以完成实验了:select sno,cno from sc where sc.grade is null
跑出来的结果为:
为了判断是否正确,我们可以更改下数据,自己写一个成绩为null的学生出来:
所以,我们的结果是正确的。
8、 求年龄大于女学生平均年龄的男学生的姓名和年龄
这里的话,我们需要注意的是有一个嵌套,我们需要先求出女学生的平均年龄,然后,在求出比这个平均年龄大的男学生的姓名和年龄:select sname,sage from student where sage > (select avg(sage) from student where ssex = '女') and ssex = '男'
可以看到上面的式子是进行了嵌套的,所以,我们先求出了女学生的平均年龄,然后,在求出比这个年龄大的男学生的姓名和年龄,输出的结果为:
9、 求年龄大于所有女学生年龄的男学生的姓名和年龄
这一题和上一题比较类似,都是嵌套,但是这一题中需要注意的是,我们和所有进行比较,因此,需要有一个all在这里,于是我们利用all()来进行实验:select sname,sage from student where sage > all(select sage from student where ssex = '女') and ssex = '男'
由于数据的问题,我们的结果为空,所以,为了测试实验是否正确,我们进行适当的数据集的修改:
可以看到输出的结果为:
所以,我们的结果是正确的。
10 求选修四门以上课程的学生的总成绩,以降序输出:
这里面,我们需要注意的点有以下几点:选修四门课程,总成绩,降序,分组。所以,我们可以看到的是,这里面的知识点其实我们都已经很熟悉的了。所以,我们可以直接进行代码的书写:select sno,sum(grade) sum from sc where grade >= 60 and sno in (select sno from sc group by sno having count(sno)>4) group by sno order by sum(grade) desc
这个时候,我们可以看到输出的结果为:
所以,我们看到这次的实验结果是正确的。
相关文章推荐
- sql语言查询与集合操作
- 稀疏数据压缩查询方法:Rank & Select 操作
- java开发中select下拉列表在查询操作中保留查询条件问题
- SQL操作表数据_select查询操作
- Mysql数据库学习(三):表的crud操作、完整性约束、select各种查询
- MySQL 之SQL语言、表库操作、查询及变量精讲
- 详解用SELECT命令在MySQL执行查询操作的教程
- Select语句的子查询和多表操作.六
- select语句(1)--数据查询操作
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
- (三)mysql——SQL基本操作之SELECT查询
- SELECT中常用的子查询操作
- select语句中位于from关键词之后的表格名称用来决定将要进行查询操作的目标表格。
- mysql-select查询操作
- thinkphp查询select操作
- SQL SERVER 2008用Select操作处理数据(一)——查询语句的语法流
- 详解用SELECT命令在MySQL执行查询操作的教程
- Mysql中的select查询操作
- mysq Point类型 查询和插入操作:insert和select
- 数据库中增加操作insert into的用法和查询select的用法